Вот мое решение этой проблемы, и мне потребовалось некоторое время, пока мне удалось ее создать.
Я попытался переопределить внутренний диспетчер разрешений, но он скрыт, и не было возможности переопределить его, поэтому единственный способ былиспользовать «Выбор обработчиков Windsor» для принудительного использования моего PermissionManager
1) Перейти к BoilerPlate и скопировать эти файлы (PermissionDefinitionContextBase, PermissionDictionary, PermissionManager) в ваш проект.
2) В модуле ядра в PreInitialize () добавьте эту строку в начале:
//Added this Handler so i can redirect every IPermissionManager to my Custom Implementation
IocManager.IocContainer.Kernel.AddHandlerSelector(new PermissionManagerHandler());
3) Определите PermissionManagerHandler
public class PermissionManagerHandler : IHandlerSelector
{
public bool HasOpinionAbout(string key, Type service)
{
return typeof(IPermissionManager) == service;
}
public IHandler SelectHandler(string key, Type service, IHandler[] handlers)
{
return handlers.First(x => x.ComponentModel.Implementation == typeof(PermissionManager));
}
}
4) в модуле ядра. Метод PostInitilize () add
IocManager.Resolve<PermissionManager>().Initialize();
5) В диспетчере пользовательских разрешений я изменил функцию инициализации, добавив
Permissions.Clear();
6) каждый раз, когда я добавляю новое разрешение, я вызываю функцию инициализации, чтобы я мог переиздать любую вещьиспользуя команду:
IocManager.Resolve<PermissionManager>().Initialize();