1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | if (账号密码验证成功) { //登陆成功 Session[ "User" ] = account; FormsAuthenticationTicket ticket = new FormsAuthenticationTicket (1, account.ID.ToString(), DateTime.Now, DateTime.Now.AddDays(1), true , "1,5,7" , //可以存储role "/" ); var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket)); cookie.HttpOnly = true ; HttpContext.Response.Cookies.Add(cookie); return RedirectToAction( "Index" , "Admin" ); } |
需要使用的Role验证的地方
1 2 3 4 | if (User.IsInRole( "1" )) { //用户拥有“1”角色权限 } |
在需要,验证的Controller、Action上面添加注解属性,比如这个Action 只允许RoleID 为包含1或2或3的访问,而当前用户RoleID为(1、5、7)就是用户有权访问了。
1 2 3 4 5 | [Authorize(Roles= "1,2,3" )] public ActionResult Index() { return View(); } |
需要配置web.config
1 2 3 4 5 6 7 8 9 | <authentication mode= "Forms" > <forms loginUrl= "~/Login/Index" timeout= "2880" /> </authentication> <roleManager enabled= "true" defaultProvider= "CustomRoleProvid" > <providers> <clear/> <add name= "CustomRoleProvid" type= "HotelShow.CustomRoleProvider" /> <!--自定义获取Role的方法--> </providers> </roleManager> |
CustomRoleProvider类的需要继承RoleProvider,实现GetRolesForUser方法
1 |
1 2 3 4 5 6 7 | public override string [] GetRolesForUser( string username) { var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; var ticket = FormsAuthentication.Decrypt(cookie.Value); string role = ticket.UserData; return role.Split( ',' ); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理