[ELMA3] Создание собственных глобальный настроек для модуля
В статье приведен пример создания глобальных настроек для доступа в модуль. В данном примере реализован пункт меню модуля, который в зависимости от прав доступа будет отображаться или скрываться. Даже если пользователь получит прямую ссылку на страницу Вашего модуля – доступ будет запрещен, о чем свидетельствует сообщение о нехватке прав.
Пример отображения данных
Рис. 1. Доступ к модулю в глобальных настройках доступа
Методы интерфейса IModuleAccessPermissionProvider
/// <summary> /// Получить словарь из значений "Идентификатор модуля->Привилегия доступа к модулю" /// </summary> /// <returns></returns> Dictionary<string, Permission> GetModuleAccessPermissions();
Методы интерфейса IPermissionProvider
/// <summary> /// Получить список привилегий /// </summary> /// <returns></returns> IEnumerable<Permission> GetPermissions(); /// <summary> /// Получить информацию о назначении привилегий ролям по умолчанию /// </summary> /// <returns></returns> IEnumerable<PermissionStereotype> GetPermissionStereotypes();
Пример реализации интерфейсов
[Component] public class ModuleAccessPermission : IModuleAccessPermissionProvider, IPermissionProvider { public const string Module = __ModuleInfo.ModuleId; public static string ModuleName = SR.M("Ваш модуль"); /// <summary> /// Идентификатор для "Доступ к Вашему модулю" /// </summary> public const string ModuleAccessPermissionId = "{DC849F17-681F-45d9-8C06-C017283BE766}"; /// <summary> /// Доступ к Вашему модулю /// </summary> public static readonly Permission ModulePermissionAccess = new Permission(ModuleAccessPermissionId, SR.M("Доступ к Вашему модулю"), SR.M("Возможность работы с модулем"), ModuleName, moduleUid: Module //Можно добавить ,readOnly: true - тогда в данной привилегии будет только указанная группа. ); /// <summary> /// Получить словарь из значений "Идентификатор модуля->Привилегия доступа к модулю" /// </summary> /// <returns></returns> public Dictionary<string, Permission> GetModuleAccessPermissions() { return new Dictionary<string, Permission> { { Module, ModulePermissionAccess } }; } /// <summary> /// Получить список привилегий /// </summary> /// <returns></returns> public IEnumerable<Permission> GetPermissions() { return new[] { ModulePermissionAccess }; } /// <summary> /// Получить информацию о назначении привилегий ролям по умолчанию /// </summary> /// <returns></returns> public IEnumerable<PermissionStereotype> GetPermissionStereotypes() { return new[] { new PermissionStereotype( new[] { ModulePermissionAccess }, SecurityConstants.AdminGroupDescriptor) }; } public List<string> LocalizedItemsNames { get { return null; } } public List<string> LocalizedItemsDescriptions { get { return null; } } public List<string> LocalizedItemsCategories { get { return null; } } }
В данном примере представлена реализация доступа к модулю (отображается или скрывается соответствующий пункт меню в зависимости от прав доступа). Как создать свой пункт меню, Вы можете прочитать в данной статье.
После активации модуля в глобальных настройках доступа появится раздел с Вашими привилегиями. Для применения привилегий можно воспользоваться двумя способами:
- Навесить атрибут с привилегией на контроллер или метод контроллера.
- Проверить привилегии в отдельных методах/представлениях.
Пример кода контроллера с атрибутом:
public class HomeController : BPMController { [ContentItem] [Permission(ModuleAccessPermission.ModuleAccessPermissionId)] public ActionResult ViewItem() { return View("View"); } }
Пример проверки привилегий в методах/представлениях:
if (SecurityService.HasPermission(UserManager.Instance.GetCurrentUser(), ModuleAccessPermission.ModulePermissionAccess)) { //Ваш код }