MVC4授权属性重写; 如何获取传递的角色?

6

我正在尝试创建自己的[Authorize]属性,以便使用自己的授权逻辑来具有分层角色。

如果有人在控制器或操作上执行[Authorize(Roles = "Admin")],我如何在我的AuthorizeCore函数中获取字符串"Admin"?

我正在使用以下代码:

public class Authorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        //authorize role logic
            if (true)
                return true;

        return false;
     }
    }

MVC4, .net 4.5, c#, VS 2012

3个回答

9
这是一件很常见的事情,你可能已经面对过。
在MVC4中,这篇文章中的建议应该也适用,因为它在MVC3中起作用:- ASP.NET MVC - Alternative to Role Provider?
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        bool isAdmin;
        if(Roles.Contains("Admin"))
           isAdmin = true;

        return isAdmin ;
    }

1
谢谢,我原本以为Roles是当前登录用户的角色,并没有想到它会包含[Authorize("Admin")]中传递的内容。 - Kyle
@user1308743,没问题,投票给答案也是一件好事,不要忘记了 ;) - Yusubov
我只是在等待时间限制过去,以标记为答案并投票 =) - Kyle
没问题,如果有任何问题请告诉我。 - Yusubov

1

Roles 是一个公共属性。你应该能够做到这一点:

public class Authorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {

        if(Roles.Contains("MyRole"))
           return true;

        return false;
    }
}

或者无论你需要做什么


0
如果您需要获取允许角色的列表,只需获取Roles属性即可。它将列出在属性装饰中指定的字符串。
public class Authorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var allowedRoles = Roles;
    }
}

你可以在AuthorizeAttribute定义中看到这个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接