0

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

  • 用户名 - Windows 用户名 (Context.User.Identity.Name)
  • DivisionID - 到分区表的链接
  • RoleID - 来自自定义角色表
  • RegionID - 最近添加的字段将我的应用程序划分为国家(加拿大、美国、国际)

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

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

  • 无效的权限页面 (false)
  • 区域选择页面 - 会话中未选择区域 (RegionID = 0)
  • 他们请求的页面 - 如果为该区域设置了权限

我还研究过在 Global.asax 中使用 Application_AuthenticateRequest 方法,但我不能在该区域内使用 Session 并且它似乎比应有的更多地击中 Application_AuthenticateRequest。

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

4

2 回答 2

0

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

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

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

就像是

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”类的想法和这个http://www.4guysfromrolla.com/articles/041305-1.aspx

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

于 2012-05-16T20:12:07.207 回答
0

我真的只使用过表单身份验证——但我假设您将使用 Windows 身份验证来进行成员身份验证和某种形式的自定义角色身份验证。我从来没有做过,但有人会认为它应该工作。

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

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

于 2012-05-16T21:05:28.830 回答