ASP.NET 中的自定义角色/权限

本文关键字:角色 权限 自定义 NET ASP | 更新日期: 2023-09-27 18:34:19

我目前有一个Web应用程序,它正在使用自己的"权限"表,其中包含以下列:

  • 用户名 - Windows 用户名 (Context.User.Identity.Name(
  • 分部 ID - 指向分部表的链接
  • 角色 ID - 来自自定义角色表
  • RegionID - 最近添加的字段,用于将我的应用程序划分为国家/地区(加拿大、美国、国际(

当用户登录到站点时,他们选择要输入的区域,我需要根据他们是否为该特定区域 ID 设置了任何权限来授予他们访问这些区域的权限。选择区域后,RegionID 将存储在 Session 中,并将用于此权限检查和定义如何在页面上填充数据(我尚未在所有页面中实现 Session 变量,因此可以根据需要进行更改(

我最初的想法是在每个页面上运行权限检查,将它们发送到三个目的地之一:

  • 无效的权限页(假(
  • 区域选择页面 - 在会话中未选择区域 (区域 ID = 0(
  • 他们请求的页面 - 如果具有该区域的权限集

我还研究了在 Global.asax 中使用 Application_AuthenticateRequest 方法,但我不能在这个区域内使用会话,而且它似乎比应有的更能达到Application_AuthenticateRequest。

对于我当前的应用程序,根据每个用户的权限,使用其相应的区域对每个用户进行身份验证的最佳方式是什么?

ASP.NET 中的自定义角色/权限

我实际上只使用表单身份验证 - 但我假设您将使用 Windows 身份验证作为成员资格和某种形式的自定义角色身份验证。我从来没有做过,但人们会认为它应该有效。

http://msdn.microsoft.com/en-us/library/system.web.security.roleprovider.getrolesforuser

您可以创建一个自定义提供程序,该提供程序将考虑区域的会话值,以便返回正确的角色。我知道对于 Web 应用程序,默认提供程序将角色存储为客户端上的加密 cookie。我想你可以做类似的事情。

通常我不推荐这种方法,但是由于您似乎已经开发了应用程序,因此您可以相对轻松地实现以下内容,而不会产生太大的动荡:

为页创建一个基类,然后从基类继承应用程序中的所有页。当然,您将在基类中实现"授权"。

一个相当令人讨厌的问题是,如果你忘记从基类派生你的页面,那么你的页面就没有安全性......但是您很容易忘记实施"权限检查"....

类似的东西

public class AuthorizedPage: System.Web.UI.Page
{
    protected override void OnLoad(EventArgs e)
    {
       // ... authorization logic here...
       // Be sure to call the base class's OnLoad method!
       base.OnLoad(e);
    }
}

你可以 ASP.net"BasePage"类的想法和这个 https://web.archive.org/web/20211020133935/https://www.4guysfromrolla.com/articles/041305-1.aspx

或者,另一个想法,如果您使用过母版页,您也可以在母版页中执行此操作。