发布时间:2025-12-10 19:23:20 浏览次数:2
小白之AuthorizeAttribute权限控制(一)关于权限控制的初步整理,持续更新
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; } } 是否还在为Ide开发工具频繁失效而烦恼,来吧关注以下公众号获取最新激活方式。亲测可用!
【正版授权,激活自己账号】:Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】:官方授权 正版激活 自己使用,支持Jetbrains家族下所有IDE…
然后再定义一个 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],当被访问时,会先进入SystemAuthorizeAttribute 的 OnAuthorization方法,该方法没有方法值,如果不被重定向到其他页面,也就意味着没有被拦截,就会继续访问Index 方法,然后客户端就看到Home页面啦。
涉及到的知识点还有更多,后面再陆续更新关于权限控制的内容