C# 检查每个页面的权限

C# 检查每个页面的权限,c#,asp.net,C#,Asp.net,在我的网站上,我需要检查每个页面的权限, 我发现自己每页都在重复相同的代码 这是我的一页 public partial class KitView : AmsBasePage { protected void Page_Load(object sender, EventArgs e) { IddUser user = new IddUser(); user = (IddUser)Session["user"]; bool isAd

在我的网站上,我需要检查每个页面的权限, 我发现自己每页都在重复相同的代码

这是我的一页

public partial class KitView : AmsBasePage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        IddUser user = new IddUser();
        user = (IddUser)Session["user"];

        bool isAdmin = user.roles.Where(IddRole => IddRole.R_ID.Equals(3)).First().IsInRole;
        bool isIddTeam = user.roles.Where(IddRole => IddRole.R_ID.Equals(2)).First().IsInRole;
        bool isProductionTeam = user.roles.Where(IddRole => IddRole.R_ID.Equals(1)).First().IsInRole;

        if (isAdmin)
        {
            hypAddComponent.Visible = true;
            hypAddComponent.NavigateUrl = "AddComponent.aspx?CKID=" + Request.QueryString["CKID"];
        }



    }
}
最佳实践是如何扮演这些角色的:isAdmin、isIddTeam、isProductionTeam 在每一页中,但不要在每一页代码中重复下面的代码

IddUser user = new IddUser();
        user = (IddUser)Session["user"];

        bool isAdmin = user.roles.Where(IddRole => IddRole.R_ID.Equals(3)).First().IsInRole;
        bool isIddTeam = user.roles.Where(IddRole => IddRole.R_ID.Equals(2)).First().IsInRole;
        bool isProductionTeam = user.roles.Where(IddRole => IddRole.R_ID.Equals(1)).First().IsInRole;
如果您想避免冗余代码,我建议您将
授权
逻辑写在单独的
中,或者您甚至可以将
授权
逻辑写在
母版页
中(如果有的话)。然后在
webforms
中继承它们
注意:在
webforms
中,您必须
覆盖
页面加载事件,以便首先运行继承基类的
授权

如果您想避免冗余代码,我建议您将
授权
逻辑写在单独的
中,或者您甚至可以将
授权
逻辑写在
母版页
中(如果有的话)。然后在
webforms
中继承它们
注意:在
webforms
中,您必须
覆盖
页面加载事件,以便首先运行继承基类的
授权


您应该将授权代码放在母版页(ASP.NET Web表单)或布局页(ASP.NET MVC)中。这样,您的授权逻辑将只放在一个位置,并在每个页面上运行。

您应该将授权代码放在母版页(ASP.NET Web表单)或布局页(ASP.NET MVC)中。这样,您的授权逻辑将只放在一个位置,并在每个页面上运行。

我在所有页面继承的AmsBasePage类中添加了该类。 此代码

private bool _isAdmin;
    private bool _isIddTeam;
    private bool _isProductionTeam;




    protected bool isAdmin
    {
        get { return _isAdmin; }
        set { _isAdmin = value; }
    }

    protected bool isIddTeam
    {
        get { return _isIddTeam; }
        set { _isIddTeam = value; }
    }

    protected bool isProductionTeam
    {
        get { return _isProductionTeam; }
        set { _isProductionTeam = value; }
    }

我在AmsBasePage类中添加了所有页面都从中继承的内容。 此代码

private bool _isAdmin;
    private bool _isIddTeam;
    private bool _isProductionTeam;




    protected bool isAdmin
    {
        get { return _isAdmin; }
        set { _isAdmin = value; }
    }

    protected bool isIddTeam
    {
        get { return _isIddTeam; }
        set { _isIddTeam = value; }
    }

    protected bool isProductionTeam
    {
        get { return _isProductionTeam; }
        set { _isProductionTeam = value; }
    }

在母版页中检查您的授权。这样,我将被检查一次,可以避免重复。

在母版页中检查您的授权。这样,我将被检查一次,可以避免重复。

如果要避免重复授权代码,应该在中心位置执行

有很多方法可以做到这一点,但我可以给你推荐一些

  • 使用母版页-并在母版页的OnLoad中写入授权代码
  • 创建HttpModule-在ASP.NET页面事件管道中插入您自己的模块,并处理所有授权和身份验证逻辑
这就是我在一个数百万美元的项目中所做的

  • 创建从
    System.Web.UI.Page
    继承的PageBase.cs,您已经在这样做了
  • 创建PageBase的构造函数,您可以在其中传递当前页面权限,即

     public void PageBase(AppActivityEnum PageView, AppActivityEnum PageEdit, AppActivityEnum PageDelete)
    {
      this.pageView = PageView;
      this.pageEdit=PageEdit;
      this.PageDelete=PageDelete;
    
      VerifyPermission();
    }  
    
其中VerifyPermission()为:

现在这三个变量,即
CanView、CanEdit、CanDelete
PageBase
中的公共属性,因此可用于所有页面(无论您继承到哪里)。 您可以根据这些变量设置控件(添加按钮、删除按钮)、页面可见性

所以基本上,您创建一个活动表来存储每个页面的ref。活动表看起来像什么

  • 身份证
  • 名字
  • 价值观
  • 母公司
此表中的典型条目如下所示:

  1 Module-Master           MMaster       NULL 
  2 Module-Master-View      MMasterView    1 
  3 Module-Master-Edit      MMasterEdit    1 
  4 Module-Master-Delete    MMasterDelete  1
并且您维护RoleAppActivityMapping(显然):

所以RoleId one拥有所有三个权限

因此,
GetUserPermissions(RoleId)
基本上获取与传递的角色对应的所有
roleappacitivitymapping
条目

因此,在每个页面上调用PageBase的构造函数来验证查看权限。在构造函数中传递当前页面的AppActivity Id。
如果CanView为false,则在点击url时重定向到“未经授权”页面。

如果要避免重复授权代码,应在中心位置执行此操作

有很多方法可以做到这一点,但我可以给你推荐一些

  • 使用母版页-并在母版页的OnLoad中写入授权代码
  • 创建HttpModule-在ASP.NET页面事件管道中插入您自己的模块,并处理所有授权和身份验证逻辑
这就是我在一个数百万美元的项目中所做的

  • 创建从
    System.Web.UI.Page
    继承的PageBase.cs,您已经在这样做了
  • 创建PageBase的构造函数,您可以在其中传递当前页面权限,即

     public void PageBase(AppActivityEnum PageView, AppActivityEnum PageEdit, AppActivityEnum PageDelete)
    {
      this.pageView = PageView;
      this.pageEdit=PageEdit;
      this.PageDelete=PageDelete;
    
      VerifyPermission();
    }  
    
其中VerifyPermission()为:

现在这三个变量,即
CanView、CanEdit、CanDelete
PageBase
中的公共属性,因此可用于所有页面(无论您继承到哪里)。 您可以根据这些变量设置控件(添加按钮、删除按钮)、页面可见性

所以基本上,您创建一个活动表来存储每个页面的ref。活动表看起来像什么

  • 身份证
  • 名字
  • 价值观
  • 母公司
此表中的典型条目如下所示:

  1 Module-Master           MMaster       NULL 
  2 Module-Master-View      MMasterView    1 
  3 Module-Master-Edit      MMasterEdit    1 
  4 Module-Master-Delete    MMasterDelete  1
并且您维护RoleAppActivityMapping(显然):

所以RoleId one拥有所有三个权限

因此,
GetUserPermissions(RoleId)
基本上获取与传递的角色对应的所有
roleappacitivitymapping
条目

因此,在每个页面上调用PageBase的构造函数来验证查看权限。在构造函数中传递当前页面的AppActivity Id。
如果CanView为false,则在点击url时重定向到“未经授权”页面。

您使用的是asp.net mvc还是普通asp.net?您的问题需要更好的标题。您应该查看。您将能够在web.config中声明性地设置配置。我想保留我的授权,我使用的是webforms,您使用的是asp.net mvc还是普通asp.net?您的问题需要一个更好的标题。您应该查阅。你将能够