Автоматическая выдача прав

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

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

Предопределенные ключи доступа

В существует три предопределенных ключа доступа, каждый из которых имеет единственный экземпляр:

  • КлючДоступаДляВсех — этот экземпляр ключа автоматически выдает всем пользователям, в том числе анонимным;
    Примечание: Коротко о том, кто такой анонимный пользователь. Интерфейсные компоненты:имеют свойство РежимАутентификации. Стандартно это свойство имеет значение Аутентифицированный, но вы можете установить его в значение НеАутентифицированный и тогда пользователь не будет перенаправлен на страницу аутентификации при входе в приложение, то есть будет анонимным. Такого пользователя не будет в списке подключенных пользователей и Пользователи.ТекущийПользователь будет возвращать Неопределено.
  • КлючДоступаДляАутентифицированных — этот экземпляр ключа автоматически выдает всем пользователям приложения кроме анонимных;
  • КлючДоступаДляАдминистратора — этот экземпляр ключа автоматически выдает всем пользователям приложения, являющимся его администраторами (свойство подключенного пользователя Пользователи.Объект.Администратор).
Перечисленные экземпляры ключей использует самостоятельно, об этом будет рассказано далее.

Кроме перечисленных ключей в существует еще один предопределенный ключ доступа КлючДоступаПользователя. Этот класс имеет параметр Пользователь. Благодаря этому параметру ключ имеет столько экземпляров (экземпляров класса), сколько существует подключенных пользователей. поддерживает уникальность экземпляров ключей по набору значений их параметров и, значит, для каждого пользователя она будет создавать свой уникальный экземпляр ключа. Например, экземпляр ключа для текущего пользователя:

пер ЭкземплярКлюча = новый КлючДоступаПользователя.Объект(Пользователи.ТекущийПользователь)

В отличие от перечисленных выше трех ключей, экземпляры ключа КлючДоступаПользователя самостоятельно только выдает пользователям, но никак не связывает с элементами проекта (не создает разрешения доступа). Вы можете самостоятельно создать разрешения, если ваша система прав построена таким образом, что конкретное право нужно ставить в соответствие конкретному пользователю, без промежуточных понятий типа «роль» и т. п. (подробнее).

Построение автоматической системы прав

В автоматической системе прав права контролируются на уровне элементов проекта. Например, если чтение справочника разрешено — значит, можно читать все его элементы. Если чтение справочника запрещено — ни один из элементов справочника прочитать нельзя.

Управление доступом в проекте

Каждый вид элементов проекта, для которого поддерживается управление доступом, имеет фиксированный набор прав, предоставляемый . Например, Справочник имеет права Создание, Чтение, Изменение, Удаление.

Каждый элемент таких видов имеет свойство КонтрольДоступа. В этом свойстве вы можете перечислить, каким образом будет контролироваться доступ к тому или иному праву, например:

КонтрольДоступа:
    Разрешения:
        Создание: РазрешеноАутентифицированным
        Чтение: РазрешеноВсем
        ПоУмолчанию: РазрешеноАдминистраторам

ПоУмолчанию — это специальное обозначение, которое подразумевает все права, не перечисленные явно.

РазрешеноАутентифицированным, РазрешеноВсем и РазрешеноАдминистраторам — это способы контроля доступа, использующие предопределенные экземпляры ключей:
  • РазрешеноАутентифицированным использует КлючДоступаДляАутентифицированных;
  • РазрешеноВсем использует КлючДоступаДляВсех;
  • РазрешеноАдминистраторам использует КлючДоступаДляАдминистратора.

Вычисление разрешений и выдача ключей

Благодаря такому описанию элемента проекта автоматически запишет для него разрешения доступа со следующими экземплярами ключей:

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