logo

[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;