我需要为asp.net boilerplate实现动态权限。但是,那里的团队确保关闭所有门以在运行时添加权限。
此外,实现的这种稳定性不是模块化的,它已初始化为核心依赖项。
动态添加权限的最佳方法是什么?
答案 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();