Как сделать свойство доступным в зависимости от прав доступа пользователя
<< Click to Display Table of Contents >> Разработка > Примеры разработки > Доступность, обязательность, видимость свойств Как сделать свойство доступным в зависимости от прав доступа пользователя |
Ситуация
Предположим, в компании есть процесс по выбору поставщика для закупки. Для выбора поставщика используется внутренний документ с типом «Заявка на закупку» (SourcingRequest). Карточка документа содержит свойства, схожие с договором: сумма, предмет сделки и др. Когда поставщик определен, задание для заполнения свойства Утвержденный поставщик (ApprovedSupplier) в карточке заявки приходит определенному сотруднику. Это пользователь, который входит в роль «Специалист по закупкам». Для остальных сотрудников свойство недоступно для изменения. Таким образом обеспечивается прозрачность процесса и отсутствие манипуляций при выборе поставщика.
Рассмотрим, как свойство Утвержденный поставщик сделать доступным для изменения только специалисту по закупкам.
Решение
1.Создайте в инициализации используемого модуля предопределенную роль «Специалист по закупкам». Для этого в редакторе модуля, в группе «Структуры и константы» добавьте новую константу ProcurementSpecialistRole, она будет использоваться в функции CreateRole().
public static class RoleGuid
{
// Указать GUID роли "Специалист по закупкам".
public static readonly Guid ProcurementSpecialistRole = new Guid("2062022D-745C-4E02-AF2F-26AD229E8C61");
...
}
2.В группе «Функции» перейдите по ссылке Добавить рядом с функциями инициализации. Для создания предопределенной роли «Специалист по закупкам» добавьте код, в котором вызывается функция CreateRole() из модуля Sungero.Docflow базового решения Directum RX:
public static void CreateRoles()
{
InitializationLogger.Debug("Init: Create Default Roles");
Sungero.Docflow.PublicInitializationFunctions.Module.CreateRole(ModuleName.Resources.RoleNameProcurement, ModuleName.Resources.DescriptionProcurementSpecialistRole, Constants.Module.RoleGuid.ProcurementSpecialistRole);
}
3.В группе «События» перейдите по ссылке Инициализация. В редакторе программного кода вызовите добавленную функцию CreateRoles() в обработчике события Initializing():
public override void Initializing(Sungero.Domain.ModuleInitializingEventArgs e)
{
CreateRoles();
}
В результате в инициализации модуля будет создана предопределенная роль «Специалист по закупкам».
4.Для проверки вхождения сотрудника в роль «Специалист по закупкам» в группе «Функции» добавьте серверную функцию IsProcurementSpecialist():
// Проверить, входит ли субъект прав в роль "Специалист по закупкам".
// <param name="recepient">Субъект прав.</param>
[Remote, Public]
public bool IsProcurementSpecialist(IRecipient recipient)
{
var role = Roles.GetAll().FirstOrDefault(r => r.Sid == Constants.Module.ProcurementSpecialistRole);
return role != null && recipient.IncludedIn(role);
}
В результате после выполнения функция вернет True, если сотрудник входит в роль «Специалист по закупкам», иначе – False.
5.Чтобы сделать свойство Утвержденный поставщик (ApprovedSupplier) доступным для изменения только специалисту по закупкам, в редакторе типа документа «Заявка на закупку» (SourcingRequest) добавьте событие «Показ формы». Это событие задает настройки формы карточки документа.
// Сделать свойство Утвержденный поставщик (ApprovedSupplier) доступным для изменения,
// если текущий пользователь входит в роль "Специалист по закупкам".
public override void Showing(Sungero.Presentation.FormShowingEventArgs e)
{
base.Showing(e);
_obj.State.Properties.ApprovedSupplier.IsEnabled = Functions.Module.Remote.IsProcurementSpecialist(Users.Current);
}
В результате выполнится проверка принадлежности текущего пользователя к конкретной роли. В зависимости от этого свойство Утвержденный поставщик (ApprovedSupplier) будет доступным или недоступным для редактирования.
Как сделать свойство обязательным в зависимости от значения другого свойства? Properties (IsVisible, IsRequired, IsEnabled и т.д.) – состояние свойств сущности |
© Компания Directum, 2024 |