首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何最好地使用ASP.NET web应用程序上的表单身份验证处理基于角色的权限?

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

Stack Overflow用户
提问于 2008-08-28 20:05:19
回答 3查看 2.8K关注 0票数 3

我使用ASP.NET登录控件表单认证作为ASP.NET web应用程序的成员资格/凭据。

我有两个角色:

  • 用户
  • 管理员

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

  • 每个人(默认,帮助)
  • 匿名(CreateUser,Login,PasswordRecovery)
  • 用户(ChangePassword,DataEntry)
  • 行政人员(报告)

ASP.NET我的视频系列:成员和角色中的示例中展开,我将这些页面文件放入这样的文件夹中:

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

它可以工作,但在我看来似乎是疯狂的,它给当Login.aspx不在根目录时ReturnUrl参数 of Login.aspx带来了一些问题。

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

EN

回答 3

Stack Overflow用户

发布于 2008-08-28 20:26:50

我头上有几个解决方案。

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

Stack Overflow用户

发布于 2008-08-28 20:31:46

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

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

这允许对每个页面进行自定义,而不必在web.config中放置大量的内容来控制每个页面。

票数 1
EN

Stack Overflow用户

发布于 2008-08-28 20:51:53

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

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

代码语言:javascript
复制
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

而且你还得把

在页面顶部,这样您就可以访问母版页的扩展属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档