角色–动作类通用权限系统的设计
这两天遇到了一个项目中的问题就是为系统设计一个通用的权限系统,要求如下:
1 页面上的链接、按钮等只对具有权限的人开发
2 使用基于角色的权限设置
其实很简单,因为要求少,但是因为对方不知道其业务需求的变化情况,因此需要留有变动的余地。
就这个问题,我写了一套比较简单的通用权限系统,使用说明如下:
权限动作
Auth文件夹下的auth.xml为权限系统的定义文件,其中cat为权限的类别,而其中的子元素item为动作权限名称以及值。
例如:
代表角色管理的四个权限
页面显示
为了不修改原有系统的逻辑以及构架,页面显示采用在原有的元素中添加rule的方式进行权限控制。
例如:
其中,rule是对元素显示要求的权限,具备rule中以|分隔开的任意一个值即可满足条件。
注意,为了使得权限系统对于最高管理员生效,请大家在rule中首先添加Admin,方便测试
后台代码
为了防止用户强制注入,后台代码采用权限管理的函数进行控制。其中,使用Auth.Auth.V(“权限名”)来写入期望的权限,而Admin为最高权限,请大家在权限命中首先添加,添加以|分割开的多个权限名代表满足任意一个即可。
例如:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Auth.Auth.V("Admin|User_Role_Add");
}
}
代表用户如果具备Admin或是UserRoleAdd权限之一即可正常执行,否则跳转到无权限页面。
项目已经作为开源方式添加到了codeplex上,因为是第一次设计这样的复用性权限系统,所以可以改进的地方还有很多~