1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,权限管理,RBAC,访问权限管理,讲师:马明,概述,RBAC,是指基于角色的访问控制,本掌主要描述了,ThinkPHP,的,RBAC,设计思想和使用实例,给出了一个统一和方便的权限控制解决方案。,认证过程,1.,判断当前模块的当前操作是否需要认证,2.,如果需要认证并且尚未登录,跳到认证网关,如果已经登录 执行,5,3.,通过委托认证进行用户身份认证,4.,获取用户的决策访问列表,5.,判断当前用户是否具有访问权限,认证原理,R
2、BAC:saveAccessList()/,获取并保存用户访问权限列表,这个时候其实是获取当前登录用户对应的权限列表信息,系统会把用户的权限列表保存在,SESSION,里面,格式类似于,$_SESSIONAppNameModuleNameActionName,如果存在这样一个数据,就表示用户具有,AppName,的,ModuleName,模块的,ActionName,操作的访问权限,否则就表示没有权限。如果有些模块并没有定义操作,那么就会读取,Public,模块的操作权限。,在应用系统的开发过程中,只需要设置相关的配置项和添加上面的认证方法,其他的认证和决策访问就由,RBAC,组件的,Acce
3、ssDecision,方法自动完成了。你其实并不需要关心系统是如何判断用户是否具,有权限的,这个在传统的权限控制模式里面是需要手动来一一判断的。,配置文件,true,USER_AUTH_TYPE=1,/,默认认证类型,1,登录认证,2,实时认证,USER_AUTH_KEY=authId,/,用户认证,SESSION,标记,ADMIN_AUTH_KEY=administrator,/,管理员用户名,USER_AUTH_MODEL=User,/,默认验证数据表模型,AUTH_PWD_ENCODER=md5,/,用户认证密码加密方式,USER_AUTH_GATEWAY=/Public/login,/
4、默认认证网关,NOT_AUTH_MODULE=Public,/,默认无需认证模块,REQUIRE_AUTH_MODULE=,/,默认需要认证模块,NOT_AUTH_ACTION=,/,默认无需认证操作,REQUIRE_AUTH_ACTION=,/,默认需要认证操作,/RBAC_ERROR_PAGE=true,/,定义权限错误页面,GUEST_AUTH_ON=false,/,是否开启游客授权访问,GUEST_AUTH_ID=0,/,游客的用户,ID,RBAC_ROLE_TABLE=think_role,RBAC_USER_TABLE=think_role_user,RBAC_ACCESS_TA
5、BLE=think_access,RBAC_NODE_TABLE=think_node,);,return array_merge($config,$array);,?,数据库分析,表名称可以自定义,在配置文件可以自由配置,think_user,表根据实际需求,1.,管理员表和用户表是同一张表,则可以直接应用已建过的,think_user,表的用户,2.,管理员表和用户表分开存储,则另建,think_admin,表,表名也可以自定义,以下四张表有一些特定字段是必须设置的,think_node,节点表,think_role,角色分组表,think_access,权限分配表,think_role_
6、user,用户分组表,用户表是完全自定义的,但是要有一列自增长编号列,think_user,用户表,角色分组表,表名:,think_role,字段:,id,角色分组,ID,name,角色分组名称,pid,父分组,status,分组状态,remark,详细描述,模拟数据:,(1,站长,0,1,站长拥有最高权限,),(2,管理员,0,1,管理员组,),权限分配表,表名:,think_access,字段:,role_id,分配权限角色,ID,think_role,表中的,id,字段,node_id,分配权限(项目、模块、操作),ID,think_node,表中的,id,字段,level,分配权限节点的等级,pid,分配权限节点的父节点,模拟数据:,(1,1,1,0),给站长赋予,Rbac,项目的操作权限,(1,2,2,1),给站长赋予,User,模块的操作权限,(1,4,3,2),给站长赋予,User,模块的添加操作权限,用户分组表,表名:,think_role_user,字段:,role_id,用户组,ID,think_role,表中的,id,字段,user_id,用户,ID,think_user,表中的,id,字段,模拟数据:,(1,1),给,ID,为,1,的用户赋予站长组的权限,(2,2),给,ID,为,2,的用户赋予管理员组的权限,华章培训网版权所有,