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(); } }
浙公网安备 33010602011771号