[ELMA3] Добавление/удаление прав на документ в сценарии
Примеры сценариев с использованием PublicAPI
Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарии, указанные ниже, актуальны для версий системы до 3.15.38 включительно.
Пример сценария для добавления полных прав доступа к документу определенному пользователю
Контекстные переменные:
- context.Document - переменная типа Документ;
- context.Poljzovatelj - переменная типа Пользователь.
using EleWise.ELMA.API;
Текст сценария:PublicAPI.Docflow.Document.AddViewPermission(context.Document, context.Poljzovatelj); //Права на просмотр/загрузку
PublicAPI.Docflow.Document.AddEditPermission(context.Document, context.Poljzovatelj); //Права на редактирование
PublicAPI.Docflow.Document.AddManageAccessPermission(context.Document, context.Poljzovatelj); //Права на выдачу прав
PublicAPI.Docflow.Document.AddFullAccessPermission(context.Document, context.Poljzovatelj); //Полный доступ
Пример сценария для удаления прав доступа к документу у определенного пользователя
Контекстные переменные и пространства имен те же, что приведены выше.
Текст сценария:
PublicAPI.Docflow.Document.DeletePermissions(context.Document, context.Poljzovatelj);
Примеры сценариев без использования PublicAPI
Пример сценария для добавления полных прав доступа к документу определенному пользователю
В сценарии используются переменные:
- Документ - тип объект Документ;
- Пользователь - тип объект Пользователь.
Необходимо подключить сборки:
EleWise.ELMA.Documents
EleWise.ELMA.Documents.Docflow
Нужно объявить пространство имен:
using EleWise.ELMA.Documents.Models;
using EleWise.ELMA.Security;
using EleWise.ELMA.Services;
using NHibernate.Bytecode;
Текст сценария:context.Document.Permissions.Add(new InstanceOf<DmsObjectPermission>
{
New =
{
DmsObject = context.Document,
PermissionId = EleWise.ELMA.Documents.PermissionProvider.DocumentViewPermission.Id, // - Права на просмотр
TypeRoleId = CommonRoleTypes.User.Id,
Assigned = context.Poljzovatelj
}
}.New);
context.Document.Permissions.Add(new InstanceOf<DmsObjectPermission>
{
New =
{
DmsObject = context.Document,
PermissionId = EleWise.ELMA.Documents.PermissionProvider.DocumentEditPermission.Id, // - Права на редактирование
TypeRoleId = CommonRoleTypes.User.Id,
Assigned = context.Poljzovatelj
}
}.New);
context.Document.Permissions.Add(new InstanceOf<DmsObjectPermission>
{
New =
{
DmsObject = context.Document,
PermissionId = EleWise.ELMA.Documents.PermissionProvider.DocumentManagerAccessPermission.Id, // - Выдача прав
TypeRoleId = CommonRoleTypes.User.Id,
Assigned = context.Poljzovatelj
}
}.New);
context.Document.Permissions.Add(new InstanceOf<DmsObjectPermission>
{
New =
{
DmsObject = context.Document,
PermissionId = EleWise.ELMA.Documents.PermissionProvider.DocumentFullAccessPermission.Id, // - Полные права
TypeRoleId = CommonRoleTypes.User.Id,
Assigned = context.Poljzovatelj
}
}.New);
context.Document.Save();
Пример сценария для удаления прав доступа к документу у определенного пользователя
Сборки и пространства имен те же, что приведены выше.
Текст сценария:
var item = context.Document.Permissions.ToList().FindAll(p => p.User == (User)UserManager.Instance.LoadByLogin("admin"));// получаем права на документ у пользователя admin
if (item.Any()) {
context.Document.Permissions.RemoveAll(item); //удаляем все права
context.Document.Save();
}
Особенности наследования прав доступа к документу из родительской папки
Документ может наследовать права доступа из родительской папки. При этом часто добавление дополнительных прав доступа к самому документу оказывается излишним.
Для наследования прав доступа необходимо установить признак "Наследовать права родительской папки":
context.Document.InheritPermissions = true;