如何在 ASP.NET Web 应用程序上使用表单身份验证最好地处理基于角色的权限?

发布于 2024-07-04 16:32:46 字数 1175 浏览 11 评论 0原文

我正在使用 ASP.NET 登录控件表单身份验证,用于 ASP.NET Web 应用程序的成员资格/凭据。

我有两个角色:

  • 用户
  • 管理员

我希望四个不同的组可以查看页面:

  • 每个人(默认、帮助)
  • 匿名(创建用户、登录、密码恢复)
  • 用户< em>(ChangePassword、DataEntry)
  • 管理员(报告)

扩展 ASP.NET HOW DO I 视频系列:成员身份和角色,我已将这些页面文件放入此类文件夹中:

Visual Studio Solution Explorer

我使用 ASP.NET 网站管理工具为每个文件夹设置访问规则。

它有效,但对我来说似乎很笨拙,并且会产生问题 当 Login.aspx 不在根目录 且使用 Login.aspx 的 ReturnUrl 参数

有一个更好的方法吗? 是否有一种简单的方法可以在页面级别而不是文件夹级别设置权限?

I'm using the ASP.NET Login Controls and Forms Authentication for membership/credentials for an ASP.NET web application.

I've got two roles:

  • Users
  • Administrators

I want pages to be viewable by four different groups:

  • Everyone (Default, Help)
  • Anonymous (CreateUser, Login, PasswordRecovery)
  • Users (ChangePassword, DataEntry)
  • Administrators (Report)

Expanding on the example in the ASP.NET HOW DO I Video Series: Membership and Roles, I've put those page files into such folders:

Visual Studio Solution Explorer

And I used the ASP.NET Web Site Administration Tool to set up access rules for each folder.

It works but seems kludgy to me and it creates issues when Login.aspx is not at the root and with the ReturnUrl parameter of Login.aspx.

Is there a better way to do this? Is there perhaps a simple way I can set permissions at the page level rather than at the folder level?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

苏大泽ㄣ 2024-07-11 16:32:46

在母版页中,我定义了一个用于切换安全检查的公共属性,默认为 true。 我还声明了一个字符串,它是 ; 该页面所需的角色分隔列表。

在我的母版页的页面加载中,我执行以下操作

if (_secure)
{
  if (Request.IsAuthenticated)
  {
    if (_role.Length > 0)
    {
      if (PortalSecurity.IsInRoles(_role))
      {
        return;
      }
      else
      {
        accessDenied = true;
      }
    }
    else
    {
      return;
    }
  }
}

//do whatever you wanna do to people who dont have access.. bump to a login page or whatever

,您还必须将其放在

页面顶部,以便您可以访问母版页的扩展属性

In the master page I define a public property that toggles security checking, defaulted to true. I also declare a string that is a ; delimited list of roles needed for that page.

in the page load of my master page I do the following

if (_secure)
{
  if (Request.IsAuthenticated)
  {
    if (_role.Length > 0)
    {
      if (PortalSecurity.IsInRoles(_role))
      {
        return;
      }
      else
      {
        accessDenied = true;
      }
    }
    else
    {
      return;
    }
  }
}

//do whatever you wanna do to people who dont have access.. bump to a login page or whatever

also you'll have to put

at the top of your pages so you can access the extended properties of your master page

风和你 2024-07-11 16:32:46

我的脑海中浮现出几个解决方案。

  1. 您可以在 web.config 文件中为每个页面设置限制。 这将允许您拥有您想要使用的任何文件夹层次结构。 但是,每当您添加其他页面时,它都要求您保持 web.config 文件最新。 让文件夹结构决定可访问性的好处是,您在添加新页面时不必考虑它。
  2. 让您的页面继承自定义类(即EveryonePage、UserPage、AdminPage 等)并在Page_Load 例程中进行角色检查。

A couple solutions off the top of my head.

  1. You could set up restrictions for each page in your web.config file. This would allow you to have whatever folder hierarchy you wish to use. However, it will require that you keep the web.config file up to date whenever you add additional pages. The nice part of having the folder structure determine accessibility is that you don't have to think about it when you add in new pages.
  2. Have your pages inherit from custom classes (i.e. EveryonePage, UserPage, AdminPage, etc.) and put a role check in the Page_Load routine.
渔村楼浪 2024-07-11 16:32:46

我过去使用过的一个解决方案是:

  1. 创建一个名为“SecurePage”的基本页面或类似的内容。
  2. 将属性“AllowedUserRoles”添加到基页,该属性是用户角色 List 或 List 的通用列表,其中 int 是角色 id。
  3. 在扩展 SecurePage 的任何页面的 Page_Load 事件中,将每个允许的用户角色添加到AllowedUserroles 属性。
  4. 在基页中重写 OnLoad() 并检查当前用户是否具有AllowedUserRoles 中列出的角色之一。

这允许自定义每个页面,而无需在 web.config 中添加大量内容来控制每个页面。

One solution I've used in the past is this:

  1. Create a base page called 'SecurePage' or something to that effect.
  2. Add a property 'AllowedUserRoles' to the base page that is a generic list of user roles List or List where int is the role id.
  3. In the Page_Load event of any page extending SecurePage you add each allowed user role to the AllowedUserroles property.
  4. In the base page override OnLoad() and check if the current user has one of the roles listed in AllowedUserRoles.

This allows each page to be customized without you having to put tons of stuff in your web.config to control each page.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文