代码之家  ›  专栏  ›  技术社区  ›  Homam

Asp.net样板文件中的动态权限

  •  0
  • Homam  · 技术社区  · 6 年前

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

    而且,这种实现的和平不是模块化的,它被初始化为一个核心依赖项。

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

    0 回复  |  直到 6 年前
        1
  •  0
  •   Ahmed Ghorab    6 年前

    这是我对这个问题的解决方法,我花了一段时间才成功地解决了这个问题。

    我试图重写内部权限管理器,但它是隐藏的,无法重写,因此唯一的方法是使用“Windsor处理程序选择器”强制使用我的权限管理器

    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));
         }
    }
    

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

    5) 在自定义权限管理器中,我通过添加

    Permissions.Clear();
    

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

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