张政毅
摘 要:在.net技术如此成熟的现在,很多Web程序都支持用户帐号,根据不同的登录用户提供不同的选项,报表等功能。此外,可能我们还想包含一些帐号留给我们自己公司用户,以便让它们能够登录并进行产品信息修改,比如股价,级别调整等等。本文重点不在如何进行身份认证,而在身份认证完成后也即进入系统大门后,如何保证用户只在自己有权限的范围内进行操作,而不是可以进行任意功能的操作即基于角色的按钮级别细粒度权限控制解决方案。
关键词:.NET角色;权限控制
1 基于角色的权限控制系统
基于角色的权限控制系统RBAC(Role Based Access Control)是目前最流行,也是最通用的权限控制系统。在ASP.NET中我们可以通过membership来实现创建,管理,验证用户帐号的标准的,可以扩展的平台。由于本论文是示范针对不同登录用户调整数据修改的能力, 并不是要凸显使用ASP.NET 的membership,roles,和profile系统,我们会使用一种很简单的机制来决定用户访问网页的这种能力。
2 利用ASP.NET中web控件实现权限控制的思路
大部分提供帐号的站点需要根据登录用户而定制不同的数据修改界面。管理员或许能够删除或编辑任何记录,没有管理权限的用户可能被限制只能更新或删除他们自己创建的数据。无论是哪类情况,数据web控件,ObjectDataSource,以及业务逻辑层的类可以用来扩展成基于登录用户的添加删除功能。
以AspxGridView为例,尽管web控件已经有了全面的功能,但是可能它为用户提供了太多的权限,此时,我们就需要进行权限控制。通常用户能够浏览到和修改的数据有着固定的业务规则,当不同的角色登陆时,我们会在AspxGridView中隐藏掉编辑按钮。为AspxGridView的CommandButtonInitialize事件新建一个事件处理器。在事件处理器中我们需要判断该条数据是否的操作员和当前登录人员是否是同一人。我们可以通过web控件的GetValues属性来获得一个绑定到AspxGridView上的Row实例。如果不满足相应的业务规则,我们可以通过在AspxGridView的ColumnCommandButtonType中获取一个按钮的引用,一旦我们获得这个引用,我们就可以隐藏或者删除这个按钮。代码如下:
protected void ASPxGridView_zzxx_CommandButtonInitialize(object sender, ASPxGridViewCommandButtonEventArgs e){
string V_DQCZY = Convert.ToString(ASPxGridView_zzxx.GetRowValues(e.VisibleIndex, "CZRYBM")); //通用取gv中值
//获取ASPXGRIDVIEW中某一行中某个单元格的值,此处是取操作员
string v_czybm = HUBU.UserFoundation.CurrentUserID;
//调用公共类,取出当前操作员
if (V_DQCZY != v_czybm)//如果不是同一操作员,则隐藏删除和编辑按钮
{
if (e.ButtonType == ColumnCommandButtonType.Delete)
{
e.Visible = false;
}
if (e.ButtonType == ColumnCommandButtonType.Edit)
{
e.Visible = false;
}
}
}
3 结束语
科技时代,信息是企业生存的命脉,信息的安全也必然成为企业极度重视的问题。基于角色的权限控制作为保护信息安全中的有效措施,现已有广泛的运用。与membership,roles相比,这种按钮颗粒度的权限控制显得更为方便和简单,且实用性强。
参考文献:
[1]管理信息系统中基于角色的访问控制[J]. 曹天杰,張永平. 计算机应用. 2001(08)
[2]面向用户角色的细粒度自主访问控制机制[J]. 魏立峰,孟凯凯,何连跃. 计算机应用. 2009(10)
[3]基于权限访问的信息运维分级安全管理[J]. 冷小洁. 农电管理. 2017(07)endprint