[Practice Note] 2. Authorize特性中Roles,User权限控制实现

mac2025-03-26  14

前几天网上搜索了好久的文章,整理下MVC Authorize关于Roles,Users的权限

基于上一篇OAuth四种授权模式的实现

地址:https://mp.csdn.net/postedit/102814687

1.在API项目的 Global.asax.cs中,初始化构造方法,添加授权请求初始角色,用户方法

//构造方法 public WebApiApplication() { AuthenticateRequest += WebApiApplication_AuthenticateRequest; } //授权请求初始化角色,用户 private void WebApiApplication_AuthenticateRequest(object sender, EventArgs e) { HttpCookie authcookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName]; if (authcookie == null || authcookie.Value == "") return; FormsAuthenticationTicket authticket = null; try { authticket = FormsAuthentication.Decrypt(authcookie.Value); } catch (Exception) { return; } /* Authorize(Users="A,B,C") 该用户校验,基于token生成的Identity的Name匹配, 例:var identity = new ClaimsIdentity(new GenericIdentity(context.ClientId,context.Options.AuthenticationType)); Authorize(Roles="A,B,C") 角色校验基于登陆时写入的UserData */ //Authorize(Roles="111,2222") string[] roles = authticket.UserData.Split(new char[] { ',' }); if (Context.User != null) //identity中存放的是users信息,roles是对应的roles信息 Context.User = new System.Security.Principal.GenericPrincipal(Context.User.Identity, roles); }

上面的方法步骤完成后就可以实现角色用户权限校验,接下来配置请求的角色,用户

2.在上一篇中讲到了MyOAuthAuthorizationServeProvider基于OAuthAuthorizationServerProvider的实现,参照密码模式段代码 图中标记的就是用户身份Name,对应授权特性中的Users。

角色的定义一般可以在登陆时赋予,这里我们在自己的控制器中写一个Login方法,用于定义角色。

[AllowAnonymous] public JsonResult Login() { #region //admin参数对应管理员权限,多个权限可以"A,B,C,D" FormsAuthenticationTicket authticket = new FormsAuthenticationTicket( 1, "ticket1", DateTime.Now, DateTime.Now.AddMinutes(20), false, "admin" ); string encryredticket = FormsAuthentication.Encrypt(authticket); HttpCookie authcookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryredticket); //将信息写入到请求的cookie中 HttpContext.Response.Cookies.Add(authcookie); #endregion return JsonOK("登陆成功"); }

3.写一个测试Controller

public class MyController:Controller { public JsonResult JsonOK(object o) { return Json(JsonConvert.SerializeObject(o), JsonRequestBehavior.AllowGet); } } public class RoleController : MyController { // GET: Role public JsonResult Index() { return JsonOK("No Role,No User"); } [Authorize(Roles ="admin",Users ="Alis")] public JsonResult Role1() { return JsonOK("Role-admin;user-alis"); } [Authorize(Roles ="admin")] public JsonResult Role2() { return JsonOK("role-admin"); } [Authorize(Roles = "admin,source")] public JsonResult Role3() { return JsonOK("role-admin,source"); } [Authorize(Users ="C1,Alis")] public JsonResult RoleClient2() { return JsonOK("RoleClient2"); } }

因为也是刚刚学习这块,有理解不对的地方希望大家多多指教!!相互学习

最新回复(0)