【MVC5】普通权限+用户+角色 【MVC5】使用权限+角色
发布时间:2020-12-16 01:11:54 所属栏目:百科 来源:网络整理
导读:前言: 最新开发项目要求做授权,项目是MVC+Webapi,这里只说MVC里的授权,初步学习授权内容,简单总结一下: ? 方法里设置权限示例: [Authorize] // 普通授权 [Authorize(Roles = " admin " )] 角色授权 [Authorize(Users = 用户授权 ? 【Main】核心代码1
前言: 最新开发项目要求做授权,项目是MVC+Webapi,这里只说MVC里的授权,初步学习授权内容,简单总结一下: ? 方法里设置权限示例: [Authorize] //普通授权 [Authorize(Roles = "admin")] 角色授权 [Authorize(Users = 用户授权 ? 【Main】核心代码1: 设置授权方式一(授权模式:通用授权:[Authorize]+用户授权:[Authorize(Users = "admin")]): 过期时间在配置节点的timeout FormsAuthentication.SetAuthCookie(loginUser.Name,true); 设置授权方式二(存储用户数据=角色等,ticket有效期30天)(授权模式为:通用授权+用户授权+角色授权:[Authorize(Roles = "admin")]); 这里仅是角色信息存储,具体的角色设置是在Global.aspx.cs的方法Application_AuthenticateRequest中设置new GenericPrincipal(identity,new string[] { role })起的作用; FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,name,DateTime.Now,DateTime.Now.AddDays(30),true,loginUser.Role); HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,FormsAuthentication.Encrypt(ticket)); 设置cookie的过期时间(这里是1小时) cookie.Expires = DateTime.Now.AddHours(1); Response.Cookies.Add(cookie); 【Main】核心代码2: protected void Application_AuthenticateRequest(object sender,EventArgs e) { 取得认证Check的Cookie HttpCookie cookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName]; if (cookie == null) return; 解密 FormsAuthenticationTicket ticket = null; try { ticket = FormsAuthentication.Decrypt(cookie.Value); } catch (Exception) { ; } if (ticket == 取得ticket.UserData中设定的角色 string role = ticket.UserData; From认证中,使用IPrincipal对象中的GenericPrincipal类。 该类由表示资格情报的FormsIdentity类和角色信息(string[]对象)组成。 FormsIdentity identity = FormsIdentity(ticket); GenericPrincipal principal = new GenericPrincipal(identity,1)">new string[] { role }); 把FormsIdentity赋值到Context.User中 可以从Page.User中取得该值 Context.User = principal; } ? ? 以下是原文:转载自:【MVC5】使用权限+角色 1.在Ticket中设置用户角色在权限的Ticket中设置用户的角色(这里是逗号分割)。 List<string> roles = new List<string>(); if (isAdmin) { roles.Add("Admin"); } roles.Add("Guest"); FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 1,model.UserId,DateTime.Now.AddDays(30),// 设置记住登录的时间(这里是30天) true,String.Join(",",roles)); // 设置用户角色 HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,FormsAuthentication.Encrypt(ticket)); // 设置cookie的过期时间(这里是50年) cookie.Expires = DateTime.Now.AddYears(50); Response.Cookies.Add(cookie); 2.在Global.asax.cs中添加Application_AuthenticateRequest方法protected void Application_AuthenticateRequest(object sender,EventArgs e) { // 取得认证Check的Cookie HttpCookie cookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName]; if (cookie == null) return; // 解密 FormsAuthenticationTicket ticket = null; try { ticket = FormsAuthentication.Decrypt(cookie.Value); } catch (Exception) { return; } if (ticket == null) return; // 取得ticket.UserData中设定的角色 string[] roles = ticket.UserData.Split(new char[] { ',' }); // From认证中,使用IPrincipal对象中的GenericPrincipal类。 // 该类由表示资格情报的FormsIdentity类和角色信息(string[]对象)组成。 FormsIdentity identity = new FormsIdentity(ticket); GenericPrincipal principal = new GenericPrincipal(identity,roles); // 把FormsIdentity赋值到Context.User中 // 可以从Page.User中取得该值 Context.User = principal; } 3.在Controller中使用Authorize特性// 允许匿名访问 [AllowAnonymous] public class HomeController : Controller { ...... } // 只允许登录用户访问 [Authorize] public class SampleController : Controller { ...... } // 只允许具有"Admin"角色的用户访问 [Authorize(Roles = "Admin")] public class SampleController : Controller { ...... } // 该特性同样可用于Action 参照:http://www.atmarkit.co.jp/ait/articles/0307/26/news002_2.html 已同步到【MVC5】ASP.NET MVC 项目笔记汇总 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |