我是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总是为空。 我尝试了多种变体,它总是为空。
我可以使用其他一些替代手段,但这让我发疯,这是行不通的。 好像应该这样。
答案 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()