您的位置:首页 > 职场人生

小白之AuthorizeAttribute权限控制(一)

2018-03-09 17:34 225 查看
web网站一般都需要做访问权限控制,把项目中使用的方式记录一下,也是第一次使用,作为知识积累吧。

项目是基于.NET的EF+MVC 框架,权限控制在Filters中去处理,该文件夹与Controller同级。

大致的流程:

当web请求访问某个被Attribute标记的controller或action时,就会先进入Filters中权限处理层,根据是否处理结果决定是或否有权限访问。一般没有权限时,会重定向到提示没有权限的页面或者登录页面。

现在 先自定义一个FunctionAttribute,继承 Attribute, 用于贴上需要做授权控制的方法上

public class FunctionAttribute:Attribute
{
public FunctionAttribute()
{
}
public FunctionAttribute(string name)
{
this.Name = name;
}
public string Module { get; set; }

public string Code { get; set; }

public string Name { get; set; }

public string Message { get; set; }
}


然后再定义一个 SystemAuthorizeAttribute,继承 AuthorizeAttribute,并重写里面需要用到的方法

public class SystemAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
var loginUrl = "/Portal/account/login";
filterContext.Result = new RedirectResult(loginUrl);
}
}
}

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
}

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return base.AuthorizeCore(httpContext);
}
}


权限控制的逻辑代码在OnAuthorization 方法中处理,如果验证不通过,则重定向到指定的页面。

ok,还差最后一步,我们把特性贴在需要用的地方:

[Function(Module = "客户")]
[SystemAuthorize]
public ActionResult Index()
{
return View();
}


在方法上面加的[SystemAuthorize],当被访问时,会先进入SystemAuthorizeAttributeOnAuthorization方法,该方法没有方法值,如果不被重定向到其他页面,也就意味着没有被拦截,就会继续访问Index 方法,然后客户端就看到Home页面啦。

涉及到的知识点还有更多,后面再陆续更新关于权限控制的内容
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  初级程序员 .net mvc