0

我有一个带有自定义用户/角色提供程序的 ASP.NET MVC4 站点。实体框架与底层的用户和角色实体一起工作。现在我介绍一个RolePermissions的概念。每个角色都有一个关联的权限列表,允许该角色中的用户在系统内执行某些操作,例如删除评论。

在我的自定义构建管理面板中,我想列出控制器的所有操作,并且能够根据当前用户角色中权限的存在来允许或禁止调用某些操作。

问题是:

  1. 是否可以?
  2. 如何在控制器中列出一组操作。
  3. 如何分配或取消操作与角色权限之间的关联。

可能的战略:

我介绍了一个应用于所有控制器和操作的全局自定义过滤器,它检查我的数据库以查看我是否具有逻辑关联。这样,每次用户调用某个操作时都会运行一个检查代码。我仍然如何列出控制器和操作(也许通过反射?)

4

1 回答 1

1

我仍然如何列出控制器和操作(也许通过反射?)

是的,反思是一种方法。下面是一个如何获取所有控制器类型列表的示例:

public IEnumerable<Type> GetControllers()
{
    IEnumerable<Type> typesSoFar = Type.EmptyTypes;
    var assemblies = BuildManager.GetReferencedAssemblies();
    foreach (Assembly assembly in assemblies)
    {
        Type[] typesInAsm;
        try
        {
            typesInAsm = assembly.GetTypes();
        }
        catch (ReflectionTypeLoadException ex)
        {
            typesInAsm = ex.Types;
        }
        typesSoFar = typesSoFar.Concat(typesInAsm);
    }
    return typesSoFar.Where(type => 
        type != null && 
        type.IsPublic && 
        type.IsClass && 
        !type.IsAbstract && 
        typeof(IController).IsAssignableFrom(type)
    );
}

然后您可以获得ActionDescriptor每种控制器类型的列表:

foreach (var controller in GetControllers())
{
    ActionDescriptor[] actions = new ReflectedControllerDescriptor(controller).GetCanonicalActions();
    foreach (var action in actions)
    {
        // here you know everything about the action
    }
}
于 2012-10-19T11:50:37.563 回答