我正在使用MembershipProvider,目前有3个角色: 用户,超级用户,管理员。
此外,我的页面只能由管理员和超级用户查看。 对于这些页面,我在web配置中使用配置:
<location path="Users.aspx">
<system.web>
<authorization>
<allow roles="Admin, Super User"/>
<deny users="*" />
</authorization>
</system.web>
</location>
这完全没问题。
但我有一堆页面
Evaluations
Actions
Reports
Files
我希望单独访问。我希望单独授予对每个页面的访问权限。
有没有更好的方法来为每个页面创建角色而不是分配给这些角色?
P.S。 我使用的是ASP.NET,而不是MVC
答案 0 :(得分:2)
是的,将您的文件夹结构修改为:
- Super User
- Admin
- All
然后你可以做这样的事情:
<location path="Super User">
<system.web>
<authorization>
<allow roles="Super User"/>
<deny users="*" />
</authorization>
</system.web>
</location>
<location path="Super User/Admin">
<system.web>
<authorization>
<allow roles="Admin"/>
<deny users="*" />
</authorization>
</system.web>
</location>
<location path="Super User/Admin/All">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
现在只需将页面放在适当的文件夹中即可。根据{{3}},location元素适用于所有子目录:
指定包含的配置设置适用的资源。使用具有缺少路径属性的位置将配置设置应用于当前目录和所有子目录。如果使用location而没有path属性且allowOverride为False,则子目录中的Web.config文件不能更改配置设置。
因此,根据定义,Super User
可以访问以下所有其他页面,依此类推。
答案 1 :(得分:1)
是的,有一种更简单的方法。将所有受限制的页面放在单独的文件夹中,并在此文件夹中创建其他web.config。此附加web.config应仅包含授权部分。
运行时将从请求文件夹到应用程序根目录评估您的web.configs。由于授权部分存在于此附加web.config中,因此它将覆盖您的根授权部分。
这样一个设置(单个web.config)可以保护任意数量的文件(目录中的所有文件)。
答案 2 :(得分:1)
您还可以使用<location>
元素为文件夹分配权限。这样,您可以将一堆页面分组到一个权限集中。此外,您可以验证代码中的权限;在global.asax中,application_postauthenticaterequest针对服务器的每个请求运行(因此对于每个aspx页面),您可以在此处编写代码进行验证,如果用户没有权限则重定向。