[ELMA3] Создание собственных глобальный настроек для модуля
В статье приведен пример создания глобальных настроек для доступа в модуль. В данном примере реализован пункт меню модуля, который в зависимости от прав доступа будет отображаться или скрываться. Даже если пользователь получит прямую ссылку на страницу Вашего модуля – доступ будет запрещен, о чем свидетельствует сообщение о нехватке прав.
Пример отображения данных
Рис. 1. Доступ к модулю в глобальных настройках доступа
Методы интерфейса IModuleAccessPermissionProvider
1 2 3 4 5 | /// <summary> /// Получить словарь из значений "Идентификатор модуля->Привилегия доступа к модулю" /// </summary> /// <returns></returns> Dictionary< string , Permission> GetModuleAccessPermissions(); |
Методы интерфейса IPermissionProvider
1 2 3 4 5 6 7 8 9 10 11 | /// <summary> /// Получить список привилегий /// </summary> /// <returns></returns> IEnumerable<Permission> GetPermissions(); /// <summary> /// Получить информацию о назначении привилегий ролям по умолчанию /// </summary> /// <returns></returns> IEnumerable<PermissionStereotype> GetPermissionStereotypes(); |
Пример реализации интерфейсов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | [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 ; } } } |
В данном примере представлена реализация доступа к модулю (отображается или скрывается соответствующий пункт меню в зависимости от прав доступа). Как создать свой пункт меню, Вы можете прочитать в данной статье.
После активации модуля в глобальных настройках доступа появится раздел с Вашими привилегиями. Для применения привилегий можно воспользоваться двумя способами:
- Навесить атрибут с привилегией на контроллер или метод контроллера.
- Проверить привилегии в отдельных методах/представлениях.
Пример кода контроллера с атрибутом:
1 2 3 4 5 6 7 8 9 | public class HomeController : BPMController { [ContentItem] [Permission(ModuleAccessPermission.ModuleAccessPermissionId)] public ActionResult ViewItem() { return View( "View" ); } } |
Пример проверки привилегий в методах/представлениях:
1 2 3 4 5 | if (SecurityService.HasPermission(UserManager.Instance.GetCurrentUser(), ModuleAccessPermission.ModulePermissionAccess)) { //Ваш код } |