Назначение прав доступа к задаче пользователю в сценарии
В системе ELMA права на просмотр задачи имеют ее автор, исполнитель, соисполнители и начальники исполнителя. Но на практике встречаются случаи, когда такой логики недостаточно для удобного использования системы. Например, начальнику отдела поручается некоторая задача и необходимо, чтобы заместитель начальника имел права на просмотр данных этой задачи. При этом функционал переназначения задачи на заместителя не является приемлемым вариантом, т.к. требуется, чтобы исполнителем по задаче был начальник отдела. Т.к. в терминологии ELMA заместитель не имеет никакого отношения к этой задаче (он не является автором, исполнителем и т.п.) и также он не является начальником исполнителя, права доступа к этой задача в рамках базового функционала он никогда не получит. Но это можно сделать с помощью сценария в бизнес-процессе.
В сценарии используются следующие переменные:
- task - переменная типа Базовый класс задачи, она содержит ту задачу, на которую назначаются права доступа для Заместителя;
- nachalnik - переменная типа Пользователь, она содержит пользователя, занимающего должность начальника;
- zamestitel - переменная типа Пользователь, она содержит пользователя, занимающего должность заместителя.
Пример сценария с использованием PublicAPI
1 | using EleWise.ELMA.API; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | //если Заместитель уже имеет права на задачу if (task.Permissions.Any(p => p.User == zamestitel)) //прекращаем выполнение сценария return ; //получаем набор прав Начальника на задачу var permissions = task.Permissions.Where(p => p.User == nachalnik).ToList(); //если права не найдены, то прекращаем выполнение сценария if (permissions.Count == 0) return ; //для каждого элемента набора прав foreach (var permission in permissions) { //создаем новый элемент набора прав для Заместителя и передаем ему те же привилегии var newPermissin = PublicAPI.Portal.Objects.Tasks.TaskBasePermission.Create(); newPermissin.Target = permission.Target; newPermissin.TypeRole = permission.TypeRole; newPermissin.AllowChief = permission.AllowChief; // можно установить false, чтобы не выдавать права доступа начальникам заместителя (всякие ситуации бывают) newPermissin.User = zamestitel; //добавляем созданный элемент в набор прав доступа к задаче task.Permissions.Add(newPermissin); } //сохраняем изменения для задачи task.Save(); |
Пример сценария без использования PublicAPI
Пространства имен:
1 2 | using EleWise.ELMA.Model.Services; using EleWise.ELMA.Tasks.Models; |
Текст сценария:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | //если Заместитель уже имеет права на задачу if (task.Permissions.Any(p => p.User == zamestitel)) //прекращаем выполнение сценария return ; //получаем набор прав Начальника на задачу var permissions = task.Permissions.Where(p => p.User == nachalnik).ToList(); //если права не найдены, то прекращаем выполнение сценария if (permissions.Count == 0) return ; //для каждого элемента набора прав foreach (var permission in permissions) { //создаем новый элемент набора прав для Заместителя и передаем ему те же привилегии var newPermissin = InterfaceActivator.Create<TaskBasePermission>(); newPermissin.Target = permission.Target; newPermissin.TypeRole = permission.TypeRole; newPermissin.AllowChief = permission.AllowChief; // можно установить false, чтобы не выдавать права доступа начальникам заместителя (всякие ситуации бывают) newPermissin.User = zamestitel; //добавляем созданный элемент в набор прав доступа к задаче task.Permissions.Add(newPermissin); } //сохраняем изменения для задачи task.Save(); |
В результате после выполнения сценария пользователь, содержащийся в переменной zamestitel, получит права доступа к той задаче, которая записана в переменную task.