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();
        }
    }
复制代码

 

posted @   fy___~  阅读(551)  评论(0编辑  收藏  举报
编辑推荐:
· 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)
点击右上角即可分享
微信分享提示