MVC5 Identity授权认证
Startup类
app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/home/login"), }) ;
登陆
public ActionResult Login() { ViewBag.Message = "Your application description page."; //登陆管理 var abc = HttpContext.GetOwinContext().Authentication; DbContext db = DbContextFactory.DbContext(); var roles = db.Set<UserInfo>().FirstOrDefault(a=>a.Id==1).UserRole.Select(a=>a.Role.Name).ToList(); var role = string.Join(",", roles); var claims = new List<Claim> { new Claim(ClaimTypes.Name,"abc"), new Claim("UserId","1"), new Claim(ClaimTypes.Role,"aaa"), new Claim(ClaimTypes.NameIdentifier,"Asp.Net"), }; var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie); var pro = new AuthenticationProperties() { IsPersistent = true }; //登陆 abc.SignIn(pro, identity); return View(); }
自定义AdminAuthorize
public class AdminAuthorize:AuthorizeAttribute { //所有角色 public List<Role> RoleList { get; set; } public override void OnAuthorization(AuthorizationContext filterContext) { DbContext db = DbContextFactory.DbContext(); RoleList = db.Set<Role>().Where(a => true).ToList(); //如果没登陆就转向登陆 if(!filterContext.HttpContext.User.Identity.IsAuthenticated) { base.OnAuthorization(filterContext); return; } if (AuthorizeCore(filterContext.HttpContext)) { } else { //没有权限转向权限页 filterContext.HttpContext.Response.StatusCode = 404; filterContext.Result = new RedirectResult("/home/NoPrim"); } } protected override bool AuthorizeCore(HttpContextBase httpContext) { if(httpContext.User.Identity.IsAuthenticated) { //登陆了就获取当前用户角色 var userRoles = (httpContext.User.Identity as ClaimsIdentity).Claims.SingleOrDefault(a => a.Type == ClaimTypes.Role).Value.Split(','); var count = RoleList.Where(r => userRoles.Contains(r.Name)).Count(); return count > 0; } else { //没有登陆就返回false return false; } } }
使用
[AdminAuthorize] public class TextController : Controller { // GET: Text public ActionResult Index() { return View(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)