使用MVC创建自定义授权属性

时间:2013-08-13 12:50:44

标签: asp.net-mvc authorization custom-attributes

我是MVC的新手,这是我第一次尝试使用它创建网站,以及简单的成员资格。我正在处理的要求是需要同时使用角色和权限。

所以我需要一个额外的授权方法,就像角色一样。 所以,例如,我需要这个工作:     [AuthorizeUser(Permission =“Browse”)]

我找到了多个创建自定义授权属性的示例,但到目前为止,没有一个实际上对我有用。传递的值会丢失,并且我不断获得空值异常。

我发现了多个类似的问题,但我找到的代码并不适用于我。 下面是我根据各种stackoverflow问题中的代码尝试的示例。


public class AuthorizeUser : AuthorizeAttribute
    {
        public string AccessLevel { get; set; }
     protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            var isAuthorized = base.AuthorizeCore(httpContext);
            if (!isAuthorized)
            {
                return false;
            }

            // My method to get permisions
            userPermissions=getpermsions();


            if (userPermissions.Contains(this.Permission))//**** problem line
            {
                return true;
            }
            else
            {
                return false;
            }
        }

}

问题是这一行:  if(userPermissions.Contains(this.Permission))

this.Permission总是为空。 我尝试了多种变体,它总是为空。

我可以使用其他一些替代手段,但这让我发疯,这是行不通的。 好像应该这样。

1 个答案:

答案 0 :(得分:2)

您在控制器中对属性的调用中使用的属性名称似乎与 AuthorizeUser 类中指定的属性名称不同。将属性 AccessLevel 更改为权限

像这样:

public class AuthorizeUser : AuthorizeAttribute
{
    public string Permission { get; set; }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {

控制器中的调用将设置属性值:

[AuthorizeUser(Permission = "Browse")]
public ViewResult Index()