ASP.MVC IUserRoleStore<>根本没有被召唤

时间:2017-12-12 22:54:24

标签: c# asp.net-mvc asp.net-identity

我已经为我的网络应用程序实现了自定义用户存储。到目前为止一切正常。 现在我想扩展商店类,以支持角色。我实现了以下接口:

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,完全没有任何区别。

1 个答案:

答案 0 :(得分:1)

User.IsInRole不检查您的数据库,只检查当前用户cookie。它将为您提供存储在cookie中的角色,但这些角色可能与您在数据库中的角色不同。如果自上次刷新cookie以来用户角色发生了变化,则可能会出现差异。

如果您需要检查数据库中的角色,请使用UserManager.IsInRoleAsyncMSDN