Динамические разрешения в Asp.net Boilerplate - PullRequest
0 голосов
/ 02 декабря 2018

Мне нужно реализовать динамические разрешения для шаблона asp.net .Тем не менее, команда позаботилась о том, чтобы закрыть все двери, чтобы добавить разрешение во время выполнения.

Более того, этот мир реализации не является модульным, и он был инициализирован как базовая зависимость.

Каков наилучший способ динамического добавления разрешений?

1 Ответ

0 голосов
/ 11 мая 2019

Вот мое решение этой проблемы, и мне потребовалось некоторое время, пока мне удалось ее создать.

Я попытался переопределить внутренний диспетчер разрешений, но он скрыт, и не было возможности переопределить его, поэтому единственный способ былиспользовать «Выбор обработчиков 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();
...