0

我对 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 始终为空。我已经尝试了多种变体,它始终为空。

我可以使用其他一些替代方法,但是这行不通让我发疯。似乎应该如此。

4

1 回答 1

2

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

像这样:

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

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {

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

[AuthorizeUser(Permission = "Browse")]
public ViewResult Index()
于 2013-08-13T18:00:54.333 回答