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 @ 2017-11-15 00:10  fy___~  阅读(554)  评论(0)    收藏  举报