检查每个页面的权限
本文关键字:权限 检查 | 更新日期: 2023-09-27 18:02:09
在我的网站上,我需要检查每个页面的权限,我发现自己每页都在重复同样的代码。
这是我的一个页面
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;
您应该将您的授权代码放在您的母版页(ASP. net)中。. NET Web表单)或布局页面(ASP。净MVC)。这样,您的授权逻辑将只放置在一个位置,并在每个页面上运行。
如果您想避免冗余代码,我建议将您的
authorization
逻辑写在单独的class
中,或者您甚至可以将aurthorization
逻辑写在MasterPage
中,如果您有的话。然后在你的webforms
中继承它们。注意:在你的webforms
中,你必须override
你的page_load
事件,以便authorization
从你继承的基类首先运行。
如果希望避免重复授权代码,则应该在中心位置进行。
可以有很多方法,但我可以给你一些建议
- 使用母版页-并在母版页的OnLoad 中编写授权代码创建一个HttpModule——在ASP中插入你自己的模块。. NET Page Events PipeLine,处理所有的授权和认证逻辑
这是我在一个几百万美元的项目中所做的
- 创建从
System.Web.UI.Page
继承的PageBase.cs -你已经在做 创建一个PageBase的构造函数,在这个构造函数中你可以传递当前的Page权限,即
public void PageBase(AppActivityEnum PageView, AppActivityEnum PageEdit, AppActivityEnum PageDelete) { this.pageView = PageView; this.pageEdit=PageEdit; this.PageDelete=PageDelete; VerifyPermission(); }
where VerifyPermission()是:
public void VerifyPermission()
{
var currentUser= SessionHelper.GetCurrentUser();
var permissions = Utility.GetUserPermissions(currentUser.RoleId);
this.CanView=permissions.Contains((int)this.pageView);
this.CanEdit=permissions.Contains((int)this.pageEdit);
this.CanDelete=permissions.Contains((int)this.pageDelete);
}
现在这三个变量,即CanView, CanEdit, CanDelete
是PageBase
中的公共属性,因此可用于所有页面(无论您继承了)。你可以设置你的控件(添加按钮,删除按钮),基于这些变量的页面可见性。
所以基本上,您创建了一个活动表来存储每个页面的引用。其中Activity表看起来像
- Id <
- 名称/gh>
- 父母
表中典型的表项如下:
1 Module-Master MMaster NULL
2 Module-Master-View MMasterView 1
3 Module-Master-Edit MMasterEdit 1
4 Module-Master-Delete MMasterDelete 1
和维护RoleAppActivtyMapping(显然):
Id RoleId AppActivityId
1 1 2
1 1 3
1 1 4
所以RoleId 1拥有所有三个权限。
所以GetUserPermissions(RoleId)
基本上得到了所有与传递的角色对应的RoleAppActivityMapping
条目。
因此在每个页面上调用PageBase构造函数来验证视图权限。在构造函数中传递当前页面的AppActivity Id。如果CanView为false,则在点击url后重定向到"未经授权"页面。
我添加了所有页面都继承的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; }
}
在母版页中检查您的授权。这样,我将被检查一次,并且可以避免重复。
- 如何检查“每个人”是否对 c# 中的文件具有完全控制权限
- 如何在基于 .net 的窗口中检查文件夹的“剪切”权限
- C# - SMO - 如何检查我是否对给定数据库具有独占访问权限(即检查数据库是否正在使用中)
- ASPX 页的权限检查代码段
- C# 使用 SharePoint 客户端对象模型检查 SharePoint 列表权限
- 在 C# 中搜索文件时检查管理员权限
- 检查Windows服务状态-我需要什么权限
- 如何检查远程主机以及本地和UNC路径上的访问权限
- 检查请求的用户是否具有管理员权限
- 如何使用C#在Sharepoint 2010中检查用户或组的权限
- 什么是管理和检查页面权限的好主意
- 如何在没有UAC的情况下从非管理员中检查管理员的写入权限
- 检查特定用户的数据库权限
- 如何使用asp.net检查在树视图子节点中导航页面的权限
- 使用自定义属性检查用户访问权限
- 如何检查您是否有运行exe文件的权限
- 用程序检查用户是否有足够的权限安装软件
- 检查共享目录权限- c#
- 如何根据asp.net中的页面查看权限检查用户查看页面的权限
- Web服务需要检查用户的NTFS文件权限