RBAC (role-based access control) 基于角色的访问控制
为了能够实现 用户对动作的访问权限管理 ,提出角色(组)的概念,把一类用户归到某一组中,也就是属于某一个角色,然后把角色和动作关联起来。属于某个角色的用户,就具有某个角色所关联的动作的访问权限。
具体实现:理论上三张表即可实现 用户和动作的关联,因为用户和角色是多对多的关系,而角色和动作也是多对多的关系,需要加上两张关系表,一张是用户与角色的关系表,一张是角色和动作的关系表(这张表也叫授权表)。
在TP中有一个Think/auth类,通过这个auth类,可以利用这里面的check方法来验证某个用户是否具有某个访问权限,如果当前用户具有某个动作的权限则返回真,如果没有则返回假。可以做一个基本公共控制器类,把验证放入这个基本公共类的初始化方法里面,让其他控制器继承这个基本公共控制器,当访问控制器的方法时候,首先会触发初始化方法,进行权限验证,通过后执行相应的方法,不通过重定向到 失败页面。可以在初始化方法里面加入一些特殊处理,如:超级管理员,某些动作不需要验证,人人都可以访问的操作。
超级管理员:在用户或管理员表里面规定一个ID为超级管理员ID,在初始化方法里面判断当前登录用户ID是否为超级管理员ID,如果是则用return跳出验证。
不需要验证的动作,可以使用数组 check_no = array('控制器1'=>['方法1','方法2','方法3'....],'控制器2'=>['方法1','方法2','方法3']...)来列出不需要验证的一些控制器的方法,然后再对用户访问的动作和这些列出来的方法进行对比,如果属于这些不需要验证的动作,则直接return。
最后在模板中展示的时候把用户没有权限的链接设置成灰色(disabled),去掉没有权限的菜单。
1.Catholic
2.Christian
3.Christmas
4.February
5.January
6.Marxist
7.Negro
8.November
9.Thanksgiving
10.abandon