Перейти к основному содержимому

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

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

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

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

  • КлючДоступаДляВсех — этот экземпляр ключа «Шина» автоматически выдает всем пользователям, в том числе анонимным;
примечание

Коротко о том, кто такой анонимный пользователь. Интерфейсные компоненты:

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

Перечисленные экземпляры ключей «Шина» использует самостоятельно, об этом будет рассказано далее.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<Создание: КлючДоступаДляАутентифицированных>
<Чтение: КлючДоступаДляВсех>
<Изменение, Удаление: КлючДоступаДляАдминистратора>

В дальнейшем эта система прав доступа будет поддерживаться следующим образом:

  • При подключении к приложению нового пользователя в обработчике события ПослеПодключения необходимо самостоятельно вызвать пересчет экземпляров ключей доступа. «Шина» сделает это автоматически только в том случае, если у пользователя заполнено свойство Утверждения.
  • При изменении существующего пользователя также необходимо вызвать пересчет экземпляров ключей доступа в обработчике события ПослеИзменения. «Шина» сделает это автоматически только при обновлении свойства Утверждения пользователей. Например, если обычному пользователю включили признак того, что он является администратором, необходимо вызвать пересчет ключей и изменить экземпляр ключа этого пользователя с КлючДоступаДляВсех на КлючДоступаДляАдминистратора.