我尝试使用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数据库,没有任何正当理由。
这甚至可能吗?
感谢。
答案 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">