我已经为我的网络应用程序实现了自定义用户存储。到目前为止一切正常。 现在我想扩展商店类,以支持角色。我实现了以下接口:
IUserStore<UserViewModel>, IUserLockoutStore<UserViewModel, string>, IUserPasswordStore<UserViewModel, string>, IUserTwoFactorStore<UserViewModel, string>, IUserRoleStore<UserViewModel, string>, IRoleStore<RoleModel, string>
使用Owin AppBuilder注册服务如下:
var ctx = UnityMvcActivator.Context.Container;
app.CreatePerOwinContext(() => ctx.Resolve<WebUserManager>());
app.CreatePerOwinContext(() => ctx.Resolve<RoleManager>());
app.CreatePerOwinContext(() => ctx.Resolve<WebApplicationUserStore>());
如果我回到我的控制器并致电User.IsInRole(Constants.Roles.COMPANY_OWNER)
,则不会调用商店来获取用户的角色。我想有一些缺失的链接,但我找不到。
我还实现了UserManager<UserViewModel, string>
,SupportsUserRole
属性显式设置为true,完全没有任何区别。
答案 0 :(得分:1)
User.IsInRole
不检查您的数据库,只检查当前用户cookie。它将为您提供存储在cookie中的角色,但这些角色可能与您在数据库中的角色不同。如果自上次刷新cookie以来用户角色发生了变化,则可能会出现差异。
如果您需要检查数据库中的角色,请使用UserManager.IsInRoleAsync
(MSDN)