SimpleMembershipProvider角色无法访问

时间:2013-04-25 12:54:59

标签: asp.net-mvc-4 forms-authentication roles simplemembership

我有MVC4应用程序,它使用SimpleMEmbershipProvider进行身份验证机制。

除了返回应用程序并使用持久性cookie进行身份验证之外,一切正常。

我的身份验证正常,但无法访问我分配给的角色。实际上,根本无法访问角色:

string.Join(",", Roles.GetRolesForUser(User.Identity.Name)) 

返回空字符串

可能导致什么?

1 个答案:

答案 0 :(得分:4)

当SimpleMembershipProvider尚未初始化时,可能会发生这种情况。示例MVC表单身份验证模板假定您将允许匿名访问您的站点,并且在您转到登录页面之前不会初始化成员资格提供程序。但是,更常见的安全技术是要求登录任何站点访问,并在_layout页面中定义由角色确定的菜单选项。但是,如果您使用持久性cookie,则不会重新访问登录页面,因此不会从成员资格数据库加载经过身份验证的用户的角色。

您要做的是在用户进入网站时初始化提供程序,以便加载值。为此,您需要在App_Start文件夹的FilterConfig类的RegisterGlobalFilters方法中添加以下过滤器

filters.Add(new YourAppNameSpace.Filters.InitializeSimpleMembershipAttribute());

当cookie经过身份验证的用户进入站点时,这将导致从数据库加载用户数据。

另一种替代技术是将[InitializeSimpleMembership]装饰器添加到cookie验证用户可能直接输入的任何控制器方法。如果你不得不把它放在很多控制器上,这有点乱。因此,在大多数情况下,将其置于全局过滤器中会更好。