В статье приведены примеры создания новых групп пользователей в системе ТЕЗИС.
Группа доступа “Секретные документы”
Группа доступа позволяет видеть только свои простые документы\договоры\задачи и при этом видеть все документы с грифом “секретно”. Такая группа может быть создана несколькими вариантами. В данной статье рассмотрено два из них.
Первый вариант заключается в маркировании видов документов по полю “Код”. Второй — маркирование на уровне экземпляров с помощью поля “Категория”.
- Вариант первый: по коду вида
Такой подход позволяет нам сделать “секретными” определенные виды документов. Рекомендуется запрещать такие виды создавать не по шаблону или закрывать вид ограничением в группе по сущности df$DocKind. В качестве подготовки в настройках видов маркируем наши виды в поле “Код” значениями “security” и “simple”.
В итоге для группы “Ограниченный доступ + все секретные” получаем такое ограничение:
({E}.id = acl.card.id and (acl.user.id = :session$userId or acl.global = true))
or ({E}.id = acl.card.id and {E}.docKind.code = 'security')
Для группы “Ограниченный доступ - все секретные” получаем другое ограничение:
{E}.id = acl.card.id and (acl.user.id = :session$userId or acl.global = true) and {E}.docKind.code = 'simple'
Таким образом, пользователи из группы доступа “Ограниченный доступ + все секретные” будут видеть свои объекты и все виды с кодом “security”, пользователи “Ограниченный доступ - все секретные” будут видеть только свои объекты с кодом “simple”. Если пользователей из группы “Ограниченный доступ - все секретные” пригласят к секретному документу, то они все равно не получат к нему доступ на просмотр.
- Вариант второй: по категории
Второй подход позволяет нам скрывать не определенные виды документов, а конкретные экземпляры. Для этого будет использоваться поле “Категория” в документе. В качестве подготовки в справочнике категорий создадим запись “Секретный” с кодом “security”. Тогда при необходимости сделать документ секретным, достаточно будет выбрать эту категорию в поле.
Рекомендуется в таком случае делать данное поле обязательным для заполнения, чтобы упростить дальнейшую работу с ограничением группы.
В итоге для группы “Ограниченный доступ + секретная категория” получаем такое ограничение:
({E}.id = acl.card.id and (acl.user.id = :session$userId or acl.global = true))
or ({E}.id = acl.card.id and {E}.docCategory.code = 'security')
Для группы “Ограниченный доступ - секретная категория”:
{E}.id = acl.card.id and (acl.user.id = :session$userId or acl.global = true)
and {E}.docCategory.code <> 'security'
Если предполагается наличие категорий с пустым кодом или документов без категории, то необходимо это учитывать в запросе, например:
{E}.id = acl.card.id and (acl.user.id = :session$userId or acl.global = true)
and ({E}.docCategory.code <> 'security' or {E}.docCategory.code is null or {E}.docCategory is null)
Таким образом, пользователи из группы доступа “Ограниченный доступ + секретная категория” будут видеть свои объекты и все, что отмечено с категорией “Секретный”. Пользователи из группы «Ограниченный доступ - секретная категория" будут видеть только свои объекты с категориями simple. Если пользователей из группы “Ограниченный доступ - секретная категория” пригласят к секретному документу, то они все равно не получат к нему доступ на просмотр.
- Альтернативное решение
Запретить создавать вид документа не по шаблону. Убедиться, что ни у одного пользователя нет шаблона, кроме администратора. Администратором создать локальный шаблон (без галки “Доступен всем”) и на вкладке “Безопасность” прописать всех тех, кто должен видеть шаблон и документы по нему созданные. В этом случае простые пользователи не создадут документ данного вида сами и не будут его видеть, пока им не дадут доступ к нему.