繁体   English   中英

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

[英]Custom Roles/Permissions in ASP.NET

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

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

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

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

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

我也研究了在Global.asax中使用Application_AuthenticateRequest方法,但是我不能在此区域中使用Session,而且看来对Application_AuthenticateRequest的打击比预期要多。

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

通常,我不建议使用此方法,但是由于您似乎已经开发了应用程序,因此可以相对容易地实现以下内容,而又不会造成太大的麻烦:

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

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

就像是

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

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

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

http://msdn.microsoft.com/zh-CN/library/system.web.security.roleprovider.getrolesforuser

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM