[Authorize(Roles = "Admin")]
使用ASP.NET Identity的MVC 5 RTM是否可以直接使用?
我没有运气。请注意,[Authorize]
并且[Authorize(Users = "AdminUser")]
工作正常,并且正如我期望的那样填充了AspNetUserRoles和AspNetRoles表,并在AdminUser用户和Admin角色之间建立了关系。此问题似乎特定于角色。
答案是UserManager的DbContext必须启用延迟加载,以便用户角色以通常的预期方式出现在应用程序中。事实证明,并非我的所有代码都是“开箱即用”的。我曾经如此微妙地自定义了DbContext。希望在将来,Microsoft将通过确保该集合中加载类似之类的东西来回避此集成错误userDbContext.Users.Include(o => o.Roles).SingleOrDefault(...)
。
ApplicationDbContext.Configuration.LazyLoadingEnabled = true;
ApplicationDbContext.Configuration.LazyLoadingEnabled = false;
请注意,如果ApplicationDbContext.Configuration.LazyLoadingEnabled
您的代码中未设置,则默认为true
。因此,忽略该行与将其设置为一样好true
。
这是我对禁用延迟加载时的情况的猜测,当UserManager或UserStore访问它时,/对象的Roles
属性为null或为空,因为该集合未手动加载。然后,该代码继续进行,就像实际上从未从未加载过集合一样,没有将角色分配给用户一样。IdentityUser
ApplicationUser
啊,沉默失败的香气。如果代码看起来不正确,只会使代码产生一些干扰。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句