一直想找个时间自己写个DEMO,因为看了不少这方面的资料,大致思路都应该清楚了,想自己动手写写应该更容易理解,同时也能找出自己那里还没有理解透彻,所以礼拜六、天就动手写了个DEMO。
第一步:定义系统权限。
第二步:添加导航菜单
在添加导航的时候,同时需要选择该菜单所拥有的权限。
这里的所属权限,用一个字段保存,后面给角色赋值权限展示列表的时候,用来比对是否显示。
第三步:新增角色,给角色赋值相应的权限,还可以直接关联到用户(用户管理就不介绍了)。
设置权限
这里每个菜单所对应的权限是通过第二步中,新增导航菜单的时候保存到数据库的。
这里显示的时候:获取权限列表跟导航表中的数据比对一下,有就现实无则不现实,这样就可以动态的控制每个导航的权限了。
我把自己大致的思路描述下,还望各位指正。
数据库设计:用户表、用户角色表、角色表、角色权限表、权限表(很传统的权限设计)。
1、把系统中会涉及到的所有功能权限,全部存到“权限表”并且用一个代码标识。
2、例举出系统中全部的功能菜单,同时也需要用一个代码来标识这个菜单。具体权限为“菜单代码—权限代码”(当然这是我自己这样设计的,也许不得当,但是我自己是这样理解滴)。
当然这里还要标识这个菜单拥有哪些权限,譬如:增加、删除等等,默认权限为增、删、改、差。这里的“Lauthority”字段保存的是权限拼接的字符串,用逗号隔开
3、功能与角色的关联。
创建角色表,添加角色(这里不做介绍);然后是“设置权限”,选择权限设置页面上面有图,很简单新增的时候判断页面哪些复选框勾选了,把勾选的值拼接起来,然后和角色ID一起存入“角色权限表”(我直接把已经拼接好的权限保存到checkbox的value中,保存到数据库的时候直接判断页面上的checkbox是否选择,然后拼接直接保存数据库)。
4、给用户赋值角色。
建立好用户信息,然后用checkbox来展示角色,同理在checkbox的value中存入角色的ID值。然后把用户ID和角色ID同时存入“用户角色表”
这里的对应关系是一对多的关系即一个用户可以同时拥有多个角色(同理一个角色同时可以拥有多个权限)。
5、使用。
登录的时候,可以获取到用户ID,通过用户ID可以找到用户所属的权限,然后找出权限所拥有的功能,动态拼接成字符串。
在进行操作的时候进行判断是否拥有该权限。
页面判断。
至此,我自己所理解的权限管理就做出来了。以前都是个人意见,各位如果有好的想法或者发现错误,还望指正。