Контроль прав доступа

обеспечивает управление доступом для следующих видов элементов проекта:

Система прав доступа основана на ключах доступа и разрешениях доступа.

Разрешения доступа, или просто разрешения, хранятся в базе данных и в упрощенном варианте привязаны к элементам проекта и их правам (например, к справочнику). Разрешения содержат информацию о том, какие права этого элемента проекта доступны каким экземплярам ключей.

Например, одно разрешение некоторого справочника может выглядеть следующим образом:

<Создание, Чтение: Администратор, Руководитель, Менеджер>

Это значит, что создавать элементы и читать справочник могут те, кому доступны экземпляры Администратор, Руководитель и Менеджер ключа доступа.

Экземпляры ключей доступа, или просто экземпляры ключей, не хранятся в базе данных приложения. В базе данных хранится только хеш-сумма того или иного экземпляра ключа. Экземпляры ключей привязаны к пользователям, и информация об этом хранится в системной таблице ключей пользователя.

Например, одна запись в этой таблице может выглядеть следующим образом:

<Иванов: Руководитель>

Это значит, что пользователь Иванов обладает экземпляром Руководитель ключа доступа.

В результате, когда понадобится узнать, какими правами обладает Иванов в отношении справочника, он возьмет экземпляры ключей доступа Иванова и посмотрит в разрешения доступа справочника. Поскольку у Иванова есть экземпляр Руководитель, ему будут доступны права Создание и Чтение справочника.

Это был пример того, как ключи описывают один аспект предметной области — ролевой доступ. Чтобы это стало возможным, добавьте в проект ключ доступа (элемент проекта вида КлючДоступа) (подробнее). В данном случае такой ключ мог бы иметь имя Роли, и именно от этого типа вы бы создавали экземпляры Администратор, Руководитель и Менеджер этого ключа доступа.

Однако система прав доступа может быть сложнее и включать в себя разные аспекты. Например, еще и конфиденциальность данных. В этом случае для каждого такого аспекта добавьте в проект свой ключ доступа.

Рассмотрим пример. В проекте существуют два ключа доступа:

  • Роли, от которого будут создаваться экземпляры Администратор, Руководитель, Менеджер;
  • Конфиденциальность, от которого будут создаваться экземпляры Открыто, Конфиденциально, Секретно.

В проекте есть два справочника: Поставщики и Сотрудники. Каждый из этих справочников имеет права: Создание, Чтение, Изменение, Удаление. Эти права определены на уровне .

Для справочника Поставщики хранятся следующие разрешения доступа:

<Чтение: Конфиденциально, Секретно>
<Создание, Изменение, Удаление: Секретно>

Для справочника Сотрудники хранятся следующие разрешения доступа:

<Создание, Чтение: Администратор, Руководитель, Менеджер>
<Изменение, Удаление: Администратор, Руководитель>

В системной таблице ключей пользователя существуют следующие записи:

<Иванов: Руководитель, Секретно>
<Петров: Менеджер, Конфиденциально>
<Сидоров: Менеджер, Открыто>

В результате:

  • Иванов может выполнять любые действия со справочниками Поставщики и Сотрудники;
  • Петров может читать оба справочника и создавать элементы справочника Сотрудники;
  • Сидоров может только создавать элементы и читать справочник Сотрудники.

Система прав предоставляет следующую функциональность:

Автоматическая выдача прав
В простейшем случае создает систему прав, которая не требует программирования. Права контролируются на уровне элементов проекта для нескольких предопределенных категорий пользователей
Самостоятельное формирование разрешений и выдача ключей
Для построения более сложной системы прав вы можете самостоятельно формировать разрешения доступа, экземпляры ключей и выдавать экземпляры ключей пользователям. В этом случае можно контролировать права как на уровне элементов проекта, так и на уровне отдельных экземпляров сущностей (RLS)
Пересчет разрешений и ключей
При самостоятельном формировании разрешений и экземпляров ключей необходимо поддерживать их актуальность. Существует перечень ситуаций, в которых необходимо обеспечить их обновление
Способы хранения дополнительной информации о пользователях
Для выдачи экземпляров ключей тем или иным пользователям может требоваться дополнительная информация об этих пользователях. Существуют разные способы хранения и получения такой информации