我们在设计系统时,为了达到高度的用户权限限制,需要对用户权限进行精细化分配,现在提供一种方法,这种方法估计大虾们都在用,偶是今天闲来无事想的。优点是在增加权限功能判断的时候,只需在后台增加权限值,前台增加或者修改判断位置,而判断函数无需修改。
我们就拿添加、删除、修改、查看四种权限来说明此方法,可以继续扩展其他权限。
一、权限值分配规则,以2的N(N>=0 )次幂为依准,采用依据是任何多个值相加都不会产生重复数。这四种权限值分配如下,也可以自己调整:
功能 功能值
添加 1
修改 2
删除 4
查看 8
数据库存储总权限功能是将某用户组所具有的某功能值进行叠加:
功能值和 权限
1 添加
2 修改
3 删除
4 查看
5 添加、查看
6 修改、删除
. .
. .
. .
依次类推,直到这四个相加完全的最大值,此处是15,就是同时具备添加、修改、删除、查看的功能。
二、数据库记录相应权限组所具有的功能链接ID和功能值,例如:
系统功能表
ID 功能 链接地址
100 管理用户 edit_user.php
101 管理用户组 edit_role.php
系统用户组表
ID 组名 权限
200 普通用户 100|3,101|7
权限中的100是系统功能表中“管理用户”对应的ID,3是普通用户组所具有的“管理用户”的权限。
权限中的101是系统功能表中“管理用户组”对应的ID,7是普通用户组所具有的“管理用户组”的权限。
具体3和7所包含的权限参照第一步的功能值和对照表。
三、页面判断权限方法,这个是关键。
权限值用roleVal表示,这个是在数据库中存储,比如第二步中的3或7
您想判断的基本权限值用baseRoleVal表示,这个就是第一步中的添加(1)修改(2)删除(4)查看(5)等。
判断规则如下:
baseRoleVal<=roleVal 并且 roleVal<(取整(roleVal/baseRoleVal)+1)*baseRoleVal
如果满足上面的标准,说明具备该权限。
例如PHP的判断函数如下:
在建立数据表时,如果是针对精密权限限制和其他功能方面考虑,我想应该具备以下几个字段:
一、自动编号字段ID。
也许你认为有别的字段已经可以区分每条记录,此字段可以不用,用了感觉多余。但是我要说的是,多一个字段不会占用太大的数据空间,关键是有时候你会发现这个东西太有用了,会省去你很大的麻烦。
二、记录创建时间、记录创建人、记录最后修改时间、记录最后修改人
这四个不用多说了,就是责任到人。操作日志当然是必不可少的。当出现问题时,你能够找到问题的所在。问题不是你想找的,是别人给你找问题,一般是领导。
三、记录的状态字段。
该字段记录该条数据的有效、无效、删除到回收站等状态。为什么要这么做,原因是:问题不是你想找的,是别人给你找问题,一般是领导。
下手不要那么快,多留条后路。你会发现帮你解决问题的时候很有用。
四、分公司权限、部门权限、员工权限、权限组权限字段
这是权限控制精细化的标志。有写东西可能没用,比如分公司权限,但是要预留,占用也占不了多大空间,但是如果没有,你想加时估计不是设计时这么简单的问题了。
具体怎么判断是否有权操作或如何操作这条数据,就看不同的需求了。