[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))
{
//Ваш код
}