ASP.Net属性类

时间:2011-07-27 16:14:33

标签: c# asp.net

我想在我的一些类方法中使用一个属性,以确保用户在使用他们调用的方法之前是经过授权的。

我想做像

这样的事情
[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;
            }
        }
    }

有人能指出我正确的方向吗?一些链接也会很棒。

谢谢。

3 个答案:

答案 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")]