发布网友 发布时间:2022-04-06 05:56
共3个回答
懂视网 时间:2022-04-06 10:17
下面由thinkphp框架教程栏目给大家介绍Thinkphp5中auth权限设置以及实现,希望对需要的朋友有所帮助!
1.将auth类下载好 放置目录: extendauthauth.php
2.将类中的SQL语句执行,可以在数据库中创建3张表 auth_group(用户组表) auth_rule(权限规则表) auth_group_access(用户与用户组关联表)
3.我想给规则 添加一个级别关系(类似于无限极分类) auth_rule(权限规则表) 中添加3个字段 pid(父级id ,0为顶级权限) level(级别) sort(排序),如下图
4,首先 自己创建管理员表,比如叫admin表,增删改查 自己去正常设计,group字段为所属用户组
5.auth_group用户组的 增删改查 也自己去制作一下,id,用户组名称,状态(开启,或者关闭),规则(所对应的是规则表的id)
6.auth_rule规则表 增删改查 也自己去制作一下,id,name(控制器/方法),title(规则名称 ) status状态(开启,或者关闭),
7. 在添加用户的时候 给用户选择 所属用户组, uid(对应的是用户id) group_id(对应的是用户所属用户组的id),这样就关联起来了
8.把会员登陆功能做好,登陆成功设置session('id'),将当前登陆会员ID存在session中
9.最关键的的一步,就是使用auth类进行验证,在common.php这个公共页面中 使用
<?php namespace appadmincontroller; use thinkController; use thinkRequest; use authAuth; //引入suth类 class Common extends Controller { public function _initialize(){ //初始化判断用户是否已经登陆 if(!session('uname')){ $this->error('请先登陆系统!','login/index'); } //获得当前页面的控制器 / 方法 $request=Request::instance(); $moudle=$request->module(); //获取当前控制器名称 $con=$request->controller(); //获取当前控制器名称 $action=$request->action(); //获取当前方法名称 $this->assign(array( 'con'=>$con, 'action'=>$action, )); $rules=$con.'/'.$action; //组合 控制器/方法 $auth=new Auth(); //实例化auth类 $notCheck=array('Index/index'); //都可以访问的页面 if(session('uid')!=1){ //不是超级管理员才进行权限判断 if(!in_array($rules,$notCheck)){ // 是否在开放权限里面 if(!$auth->check($rules,session('uid'))){ // 第一个参数 控制/方法 第二个参数:当前登陆会员的id $this->error('没有权限','index/index'); }; } } }
最终展示;
热心网友 时间:2022-04-06 07:25
相同点:
1.两种都是基于角色权限控制
2.都是同一个用户可属于多个角色或用户组
不同点:
Rbac:
1.Rbac是基于节点控制,根据3级节点,mole,controller,action,节点类似与树形结构,3级节点间相互有关联
2.表关系:用户表->用户角色关联表->角色表->角色节点关联表->节点表
3.根据3级节点控制,粒度到操作action,每个节点为单一的模块,控制器或操作
Auth:
1.Auth是基于规则控制,定制规则和条件表达式 ,每一条规则都是的
2.表关系:用户表->用户和用户组关联表->用户组表->规则表
3.根据规则控制,可自由定制不同的规则,非常自由,同一个规则内可以定制多个不同节点(中间的关系:OR AND)
4.可定制规则表达式,比如定制积分表达式
想法和问题:
Auth:
1.Auth验证多条规则时条件表达式不起效果
2.Auth官方例子只说一个根据积分的规则,假如我规则"Admin/Goods/goodsList,Admin/Goods/goodsDel"我能不能定义这里面的某些ID所属角色操作权限的规则表达式,而这些所属角色id是goods表里的某个字段,可能所属的角色是多个不同的角色?
3.Auth不支持"Admin/*"泛解析,因为他每一条规则都是的
4.对菜单,页面,按钮类的显示使用Auth会必Rbac更好更方便
Rbac:
1.新手配置Rbac的时候经常出现 Rbac $_SESSION['_access_list'] 获取不到的问题,因为Rbac是使用ThinkPHP的底层DB引擎DSN连接数据库,需要配置数据库链接和5个表的关系,字段名和表名不能出现问题
2.允许完成"Admin/*"类型的泛解析,比如这里直接定制一个Admin模块的节点,不要下级节点就可以了
通用:
1.不管是Rbac的角色表或者Auth里面的用户组表也好,都可以扩展,比如对角色或用户组进行多层分级
2.Rbac的节点和Auth的规则都可以进行分级,比如前端功能权限,后端功能权限,后端某个功能模块权限等等
3.上面两个东西都不能应用到权限管控之中去,比如Rbac不能分享上级角色权限,Auth用户组也不能,但是能更好的管理和更加流程化的操作.
热心网友 时间:2022-04-06 08:43
相同点:
1.两种都是基于角色权限控制
2.都是同一个用户可属于多个角色或用户组
不同点:
Rbac:
1.Rbac是基于节点控制,根据3级节点,mole,controller,action,节点类似与树形结构,3级节点间相互有关联
2.表关系:用户表->用户角色关联表->角色表->角色节点关联表->节点表
3.根据3级节点控制,粒度到操作action,每个节点为单一的模块,控制器或操作
Auth:
1.Auth是基于规则控制,定制规则和条件表达式 ,每一条规则都是的
2.表关系:用户表->用户和用户组关联表->用户组表->规则表
3.根据规则控制,可自由定制不同的规则,非常自由,同一个规则内可以定制多个不同节点(中间的关系:OR AND)
4.可定制规则表达式,比如定制积分表达式
想法和问题:
Auth:
1.Auth验证多条规则时条件表达式不起效果
2.Auth官方例子只说一个根据积分的规则,假如我规则"Admin/Goods/goodsList,Admin/Goods/goodsDel"我
能不能定义这里面的某些ID所属角色操作权限的规则表达式,而这些所属角色id是goods表里的某个字段,可能所属的角色是多个不同的角色?
3.Auth不支持"Admin/*"泛解析,因为他每一条规则都是的
4.对菜单,页面,按钮类的显示使用Auth会必Rbac更好更方便
Rbac:
1.新手配置Rbac的时候经常出现 Rbac $_SESSION['_access_list'] 获取不到的问题,因为Rbac是使用ThinkPHP的底层DB引擎DSN连接数据库,需要配置数据库链接和5个表的关系,字段名和表名不能出现问题
2.允许完成"Admin/*"类型的泛解析,比如这里直接定制一个Admin模块的节点,不要下级节点就可以了
通用:
1.不管是Rbac的角色表或者Auth里面的用户组表也好,都可以扩展,比如对角色或用户组进行多层分级
2.Rbac的节点和Auth的规则都可以进行分级,比如前端功能权限,后端功能权限,后端某个功能模块权限等等
3.上面两个东西都不能应用到权限管控之中去,比如Rbac不能分享上级角色权限,Auth用户组也不能,但是能更好的管理和更加流程化的操作.