Контроль прав доступа
обеспечивает управление доступом для следующих видов элементов проекта:
Система прав доступа основана на ключах доступа и разрешениях доступа.
Разрешения доступа, или просто разрешения, хранятся в базе данных и в упрощенном варианте привязаны к элементам проекта и их правам (например, к справочнику). Разрешения содержат информацию о том, какие права этого элемента проекта доступны каким экземплярам ключей.
Например, одно разрешение некоторого справочника может выглядеть следующим образом:
<Создание, Чтение: Администратор, Руководитель, Менеджер>
Это значит, что создавать элементы и читать справочник могут те, кому доступны экземпляры Администратор, Руководитель и Менеджер ключа доступа.
Экземпляры ключей доступа, или просто экземпляры ключей, не хранятся в базе данных приложения. В базе данных хранится только хеш-сумма того или иного экземпляра ключа. Экземпляры ключей привязаны к пользователям, и информация об этом хранится в системной таблице ключей пользователя.
Например, одна запись в этой таблице может выглядеть следующим образом:
<Иванов: Руководитель>
Это значит, что пользователь Иванов обладает экземпляром Руководитель ключа доступа.
В результате, когда понадобится узнать, какими правами обладает Иванов в отношении справочника, он возьмет экземпляры ключей доступа Иванова и посмотрит в разрешения доступа справочника. Поскольку у Иванова есть экземпляр Руководитель, ему будут доступны права Создание и Чтение справочника.
Это был пример того, как ключи описывают один аспект предметной области — ролевой доступ. Чтобы это стало возможным, добавьте в проект ключ доступа (элемент проекта вида КлючДоступа) (подробнее). В данном случае такой ключ мог бы иметь имя Роли, и именно от этого типа вы бы создавали экземпляры Администратор, Руководитель и Менеджер этого ключа доступа.
Однако система прав доступа может быть сложнее и включать в себя разные аспекты. Например, еще и конфиденциальность данных. В этом случае для каждого такого аспекта добавьте в проект свой ключ доступа.
Рассмотрим пример. В проекте существуют два ключа доступа:
- Роли, от которого будут создаваться экземпляры Администратор, Руководитель, Менеджер;
- Конфиденциальность, от которого будут создаваться экземпляры Открыто, Конфиденциально, Секретно.
В проекте есть два справочника: Поставщики и Сотрудники. Каждый из этих справочников имеет права: Создание, Чтение, Изменение, Удаление. Эти права определены на уровне .
Для справочника Поставщики хранятся следующие разрешения доступа:
<Чтение: Конфиденциально, Секретно>
<Создание, Изменение, Удаление: Секретно>
Для справочника Сотрудники хранятся следующие разрешения доступа:
<Создание, Чтение: Администратор, Руководитель, Менеджер>
<Изменение, Удаление: Администратор, Руководитель>
В системной таблице ключей пользователя существуют следующие записи:
<Иванов: Руководитель, Секретно>
<Петров: Менеджер, Конфиденциально>
<Сидоров: Менеджер, Открыто>
В результате:
- Иванов может выполнять любые действия со справочниками Поставщики и Сотрудники;
- Петров может читать оба справочника и создавать элементы справочника Сотрудники;
- Сидоров может только создавать элементы и читать справочник Сотрудники.
Система прав предоставляет следующую функциональность:
- Автоматическая выдача прав
- В простейшем случае создает систему прав, которая не требует программирования. Права контролируются на уровне элементов проекта для нескольких предопределенных категорий пользователей
- Самостоятельное формирование разрешений и выдача ключей
- Для построения более сложной системы прав вы можете самостоятельно формировать разрешения доступа, экземпляры ключей и выдавать экземпляры ключей пользователям. В этом случае можно контролировать права как на уровне элементов проекта, так и на уровне отдельных экземпляров сущностей (RLS)
- Пересчет разрешений и ключей
- При самостоятельном формировании разрешений и экземпляров ключей необходимо поддерживать их актуальность. Существует перечень ситуаций, в которых необходимо обеспечить их обновление
- Способы хранения дополнительной информации о пользователях
- Для выдачи экземпляров ключей тем или иным пользователям может требоваться дополнительная информация об этих пользователях. Существуют разные способы хранения и получения такой информации