您的位置:首页 > 其它

关于系统中权限和角色设计的问题

2009-06-09 13:33 363 查看
关于系统中权限和角色设计的问题


引子:权限设计一直都是WEB开发中的核心、重点、难点。根据角色显示系统菜单更是难上加难。本文针对这两点,结合成功案例和作者自己总结,希望对大家有所帮助。



系统中要求有赋予角色和赋予权限,现在系统想对某个用户的权限增加,并且增加的权限是大于用户的角色的,让该用户进去既能显示当前角色有的菜单也能看到新增的权限菜单,相关数据库表设计如下:

权限设计最少有 6 张表:

1,用户表 保存系统用户信息,如张三、李四,字段可以有id、name、fullname、email、phone、……

2,角色表 保存角色信息,如学生、管理员,字段有id、name、……

3,权限表 保存系统的权限信息,可定义系统哪些模块公开,或者什么时段可访问

4,用户角色表 关联用户和角色的关系表,如张三-学生,李四-管理员,字段有id、用户id、角色id,根据用户就知道所属的角色

5,角色权限表 关联角色和权限的关系表

6,用户权限表

一般来说第六张表用不到,但是你的需求会用到这张表。 查询每个用户拥有什么权限,得做两件事:1,从对应的用户中找出所有的角色;2,从对应的角色中找出所有的权限。然后将这些权限进行滤重就是该用户所拥有的权限。

对于超级管理员来说,只要设定一个 sys_admins 的角色就可以了,并不需要在角色权限中添加对应关系。

由于 sys_admins 拥有所有的权限,因此也没必要画蛇添足去添加这个角色的权限对应关系了。对于这个角色做特殊处理, 比如说先检查角色,如果角色中含有 sys_admins 就直接返回 true,以示拥有所有权限。





以下为针对角色菜单相关设计:

设置用户为多角色,各种角色权限综合为用户权限

数据库为角色表,用户表,菜单模块表,角色模块表



还可以直接给用户赋权限(不用通过给角色赋权限,然后给用户赋角色)

增加一个:用户权限表就可以啦。字段信息: 用户id, 权限id 。

这个非常简单。困难的是细粒度权限,也就是数据级权限。比如:

1 数据实例级别的访问控制。例如不同级别的审核员的审核不同金额的订单数据;

2 数据字段级别的访问控制。例如销售部所以员工都能查看客户信息,但只有该客户的客户经理才能够查看联系方式;

可以参考一下Metadmin产品,专门管理权限的。目前提供了试用版下载。地址是:www.metadmin.com



还有个《通用权限管理设计篇》,分析的也不错,有兴趣的朋友可以去看看,地址:http://sxiaomais.blog.163.com/blog/static/31741203200811102630406/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: