我已经为我的Web应用程序实现了自定义用户存储。到目前为止,一切都很好。现在,我想扩展商店类,以支持角色。我实现了以下接口:
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)
,则不会打电话给商店以获取用户的角色。我想有某种缺少的链接,但找不到。我还用SupportsUserRole
属性明确设置为True实现了UserManager<UserViewModel, string>
,这完全没有区别。
User.IsInRole
不检查您的数据库,而只检查当前的用户cookie。它将使您的角色存储在cookie中,但是这些角色可能与您在数据库中的角色不同。如果用户角色更改以来,由于上次曲奇被刷新以来,差异可能会出现。
如果您需要在数据库中检查角色,请使用UserManager.IsInRoleAsync
(MSDN)