我想在我的一些类方法中使用一个属性,以确保用户在使用他们调用的方法之前是经过授权的。
我想做像
这样的事情[Authorized()]
public void updateSomething()
{
//TODO:
}
我这是我的属性类
class AuthorizedAttribute : Attribute
{
public bool IsAuthorized { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string UserEmail { get; set; }
public AuthorizedAttribute()
{
//This is not the actual implementation
this.IsAuthorized = false;
}
public AuthorizedAttribute(string userEmail, string userPassword)
{
this.UserEmail = userEmail;
this.Password = userPassword;
this.UserName = string.Empty;
BusinessLogic bc = new BusinessLogic();
if (bc.VerifyCredentials(userEmail, userPassword))
{
this.IsAuthorized = true;
}
else
{
this.IsAuthorized = false;
}
}
}
有人能指出我正确的方向吗?一些链接也会很棒。
谢谢。
答案 0 :(得分:2)
我认为你在这里犯下的根本错误就是将凭证传递给属性。该属性应该做的是强制在您调用的函数发生之前执行操作。
因此,请求处理管道必须检查您的属性。即当调用函数updateSomething()时,调用程序集应该查找该属性,然后使用当前的HttpContext和User.Identity强制授权。
我有使用MVC AuthorizeAttribute的经验,可以通过派生此属性并向其添加身份验证逻辑来扩展。
public class TestAuthAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
{
return ResultOfBusinsessLogic;
}
}
然后可以在任何控制器动作上使用它。
我希望这能指出你正确的方向。
答案 1 :(得分:0)
您是否看过内置的AuthorizeAttribute?
答案 2 :(得分:0)
如果您使用的是表单身份验证/角色,则已经内置了 - 请查看PrincipalPermission
属性。
样本用法:
[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]