带有参数的 ASP.NET MVC 授权属性

Posted

技术标签:

【中文标题】带有参数的 ASP.NET MVC 授权属性【英文标题】:ASP.NET MVC Authorize attribute with a parameter 【发布时间】:2014-04-26 11:24:29 【问题描述】:

我开始用

装饰我的控制器类

[Authorize(Roles = @"DOMAIN\ADGroup")]

将显式字符串更改为从数据库收集角色分配的参数的最佳方法是什么,从而允许管理员区域可以灵活地进行角色分配。

例如说我有三个角色,为了争论

只读 读写 管理员

我想将这些角色映射到多个 AD 组

例如

只读 --> DOMAIN\Group1, DOMAIN\Group2, DOMAIN\Group3 读写--> DOMAIN\GroupWrite, DOMAIN\GroupManagers 管理员 --> DOMAIN\DomainAdmins

这将是可编辑的,我可以修改从角色到我在应用程序管理区域中选择的任何 AD 组的映射。

我的 Authorize 属性如何利用这一点?

【问题讨论】:

【参考方案1】:

您可以扩展AuthorizeAttribute 类。我是这样做的:

public class ExtendedAuthorizeAttribute : AuthorizeAttribute

    protected string permission;
    protected string group;

    public ExtendedAuthorizeAttribute(string Permission, string Group)
    
        permission = Permission;
        group = Group;
    

    protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
    
        var can = PermissionManager.Can(httpContext.User, permission, group);
        if(can.HasValue)
            return can.Value;
        return base.AuthorizeCore(httpContext);
    

【讨论】:

【参考方案2】:

Make your own role provider 根据当前用户的 AD 角色返回您的 ReadOnly 等角色列表。然后,您可以使用 Authorize 属性来引用这些角色。

【讨论】:

以上是关于带有参数的 ASP.NET MVC 授权属性的主要内容,如果未能解决你的问题,请参考以下文章

MVC 3 ASP.NET 角色-授权属性

ASP.NET MVC 中的授权属性

ASP.NET MVC 表单身份验证 + 授权属性 + 简单角色

ASP .NET MVC 中的 Authorize 属性是不是用于身份验证和授权?

如何在asp.net mvc 5身份中的授权属性中使用动态角色

使用不记名令牌授权 ASP.net mvc 操作方法