3

我正在使用 MembershipProvider,目前有 3 个角色:用户、超级用户、管理员。

我也有只有管理员和超级用户才能看到的页面。对于这些页面,我在 web config 中使用配置:

  <location path="Users.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin, Super User"/>
        <deny users="*" />
      </authorization>
    </system.web>
  </location>

这工作得很好。

但我有一堆页面

Evaluations
Actions
Reports
Files

我想要单独访问。我想分别授予对每个页面的访问权限。

有没有比为每个页面创建角色并分配给这些角色更好的方法?

PS 我使用的是 ASP.NET,而不是 MVC

4

3 回答 3

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>

现在只需将页面放在适当的文件夹中。根据MSDN 文档,位置元素适用于所有子目录:

指定包含的配置设置应用到的资源。使用缺少路径属性的位置会将配置设置应用于当前目录和所有子目录。如果 location 没有使用路径属性并且 allowOverride 为 False,则配置设置不能被子目录中的 Web.config 文件更改。

所以Super User根据定义将可以访问下面的所有其他页面,依此类推。

于 2012-12-28T13:33:09.410 回答
1

是的,有更好更简单的方法。将所有受限页面放在一个单独的文件夹中,并在此文件夹中创建一个额外的 web.config。这个额外的 web.config 应该只包含授权部分。

运行时将评估从请求文件夹到应用程序根目录的 web.configs。因为授权部分存在于这个附加的 web.config 中,它将覆盖您的根授权部分。

这样,单个设置(单个 web.config)可以保护任意数量的文件(目录中的所有文件)。

于 2012-12-28T13:32:48.740 回答
1

You can also assign permissions to a folder instead using the <location> element. This way, you can group a bunch of pages into one permission set. Also, you could validate permissions in code; in global.asax, the application_postauthenticaterequest runs for each request to the server (so for each aspx page), and you can write code here to do the validation, and redirect away if the user doesn't have the permissions.

于 2012-12-28T13:33:39.317 回答