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