使用Cookie和无SQL的ASP.NET MVC3角色身份验证?

时间:2012-04-07 05:21:57

标签: asp.net asp.net-mvc-3 roles

我尝试使用Roles进​​行表单身份验证,我已经获得了global.asax Application_AuthenticateRequest方法从cookie获取角色,这很正常。但我不知道在Web.Config中配置什么提供程序。我不想使用SQL服务器,只想使用cookie。

此行创建IPrincipal :(角色是带角色的字符串数组)

Context.User = new GenericPrincipal(Context.User.Identity, roles); 

最终目标是获取[授权(角色="管理员")]和IsInRole方法等数据注释。

此外,当在global.asax中使用时,IsInRole方法可以正常工作,但在其他地方则不然。为什么不呢?

现在配置Web.config:

<roleManager defaultProvider="DefaultRoleProvider" cacheRolesInCookie="true">

并且DefaultProvider遗憾地连接到一些空的SQL数据库,没有任何正当理由。

这甚至可能吗?

感谢。

3 个答案:

答案 0 :(得分:0)

更好的选择可能是使用ASP.NET XmlProviders。 (没有数据库)

或者,如果您只是不想拥有SQL服务实例,但希望使用某种类型的数据库的优势ErikJ's Sql CE MembershipProvider/RoleProviders。 (该博客提到CE 4.0尚未准备好投入生产,但很久以前,现在可以在较小的生产环境中使用。)

<强>更新

您当然可以自己角色AuthroizeAttribute并在派生的授权属性类上覆盖OnAuthorize。

答案 1 :(得分:0)

根据您所说的内容,您不需要自己的提供商。所以你可以阅读并简单地设置authenticaterequest。

现在的问题是你想在哪里存储它们。你想怎么存储它们?你会只在cookie中设置它们吗?肯定有一些你想保留的坚持商店,否则当饼干消失时你如何刷新他们的角色?

答案 2 :(得分:0)

为什么不直接使用内置角色提供程序并指定将角色缓存在cookie中,因此在登录时只有一个数据库调用,之后它们会自动存储在cookie中。 / p>

<roleManager defaultProvider="DefaultRoleProvider" cacheRolesInCookie="true">