做一个系统。权限管理是必不可少的。特别是WEB开发。以下是我自误自乐写的权限管理。欢迎大家拍砖。。
在我看来,权限分为两种:资源权限和操作权限。平时我们说某种角色在特定的系统中有添加或者是删除某个数据
的权限。抽象出来某个数据实体就是一种资源,而某种操作就是具体的操作权限。并不是说你有删除或者是添加的
权限。如果脱离了实体(资源),对权限而言是无任何意义的。
在权限管理中我们需要解决的问题有三种:
1。固定的菜单权限(如当前登陆者对某个url页面是否有权限)
2。动态权限(也就是所谓的行权限),所谓行权限就是数据范围不同(不同的人看到不同行数的数据)。比如部
门经理可以看到整个部门的单据,而业务员只能看到自己的。
3。对某个资源的特定操作是否有权限:如客户有分组,你有查看某个组的权限。但是你不是组的创始人,你不具备修改该组的权限。(就好比在windows中共享了某个文件夹是只读属性一样,而并非是完全控制)
基于以上的问题:
设计数据库是需要注意的几点:
user 用户表:只要记录用户的基本信息就可以
role角色表id,name:记录角色名和id
group组表:id,name记录组名和id
u_group用户和组关系表:一个用户可以属于多个组,而一个组也可以对应多个用户(映射到权限上就是一个用户
有多种角色也就是多种不同的权限。而同一种权限也可能对应多个不同的用户)
u_role表:用户角色表(同用户和组的关系表,意义机近)。在这我把组和角色作为同等级的
action表用于实现第一个问题所谓的菜单栏的固定权限(定义资源url)其字段有id,url,name,flag
action_role 表是表示资源与role的关系
actid, roleid,roletype,flag:其中角色类型有组和角色或者是部门,flag就是定义具体权限的标志位
针对第一个问题:我们可以很方便地实现。首先定义好一个action,然后对这个actionid定义好一组action_role记录
在具体的程序页面。我们只有检查check(url)就好了。。
第二个问题解决起来就有些麻烦了。不过我们在这过程中有引进一个资源问题。也就是你所针对的某个操作对象
我的实现思想是这样的:在定义action时,加上一个特殊的flag.表示这个action检查需要额外加条件的(与第一种
情况区分)。
未完待续。。。