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?您的问题需要一个更好的标题。您应该查阅。你将能够