[英]Authorize(Roles = “Admins”) causes infinite loop in MVC5 Identity 2
我们有一个MVC 5 Identity 2项目。 如何将对控制器的访问权限限制为管理员? 管理员用户访问下面的控制器时,系统会提示他们登录,但是通过CTOR会出现无限循环
[Authorize(Roles = "Admins")]
public class AdminController : Controller
{
private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
public AdminController()
{
}
public AdminController(ApplicationUserManager userManager, ApplicationSignInManager signInManager)
{
UserManager = userManager;
SignInManager = signInManager;
}
public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
}
private set
{
_signInManager = value;
}
}
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
但是,如果我将[Authorize(Roles = "Admins")]
更改为[Authorize]
,则可以正常工作。 如何将对此控制器的访问限制为管理员?
我在这里找到了解决方案
我没有意识到默认情况下不会启动RoleManager
。 为了ConfigureAuth
我添加了以下行app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
我添加到IdentityConfig.cs
public class ApplicationRoleManager : RoleManager<IdentityRole>
{
public ApplicationRoleManager(IRoleStore<IdentityRole, string> roleStore)
: base(roleStore)
{
}
public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context)
{
var appRoleManager = new ApplicationRoleManager(new RoleStore<IdentityRole>(context.Get<CustomersContext>()));
return appRoleManager;
}
}
然后将RoleManager
注入AdminController
的构造函数中
private ApplicationRoleManager _roleManager;
public AdminController(ApplicationUserManager userManager, ApplicationSignInManager signInManager,
ApplicationRoleManager roleManager)
{
UserManager = userManager;
SignInManager = signInManager;
RoleManager = roleManager;
}
public ApplicationRoleManager RoleManager
{
get
{
return _roleManager ?? HttpContext.GetOwinContext().Get<ApplicationRoleManager>();
}
private set { _roleManager = value; }
}
一切都是票
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.