Asp.net Boilerplate中的动态权限

时间:2018-12-02 11:00:02

标签: c# aspnetboilerplate

我需要为asp.net boilerplate实现动态权限。但是,那里的团队确保关闭所有门以在运行时添加权限。

此外,实现的这种稳定性不是模块化的,它已初始化为核心依赖项。

动态添加权限的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

这是我对这个问题的解决方案,我花了一段时间才设法做到这一点。

我试图覆盖内部的Permission Manager,但它没有被覆盖,因此无法覆盖,所以唯一的方法是使用“ Windsor Handler Selectors”强制使用我的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()方法中添加

    IocManager.Resolve<PermissionManager>().Initialize();

5)在“自定义权限管理器”中,我通过添加修改了“初始化功能”

Permissions.Clear();

6)每次我添加新的权限时,我都会调用Initialize函数,以便可以使用Command重新发布所有内容:

IocManager.Resolve<PermissionManager>().Initialize();