ThinkPHP下的RBAC权限访问理解【笔记】

2024-05-01 23:18

本文主要是介绍ThinkPHP下的RBAC权限访问理解【笔记】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

流程:
总共有3张表,权限,角色,管理员 其中角色表为中间连接纽带

1.完善角色表,实现增删改差,以及为角色分配权限的功能,保存权限的ID与action controller在role表,方便后便用
2.完善权限表,实现增删改查,分配对应的权限
3.完善管理员列表,分配对应的角色

原理:

问:left.html根据不同管理员身份显示不同分类列表?
答:根本--role表里的role_auth_ids 进行判断,根据SQL语句的IN字段来查询对应数据【若为管理员时,if判断来绕开in操作,从而全部查询出来】问:如何防止专业人员手动输入URL来进入不是自己权限的页面?
答:根本-- role表里的 role_ath_ac字段 在后台的所有控制器中,继承一个总控制器,在总控制器的构造方法进行动态判断权限【CONTROLLER_NAME,ACTION_NAME】是实现动态识别的关键

总结:

    role表是三个表的中间联系,也是实现不同管理员分权的关键。关键性的查询判断,从分权的操作,role表主角,其他俩表辅助。
//-----右边页面为何手动输入URL,访问权限外的页面会提示无权限?【AdminController.class.php/__contruct(){}】-----//1.若当前访问的方法不再公共允许的方法内;2.若不是超级管理员;3.若不再该管理员角色权限的允许的页面内
//则发出没有权限提示【$now_ac里的两个常量是关键,自动识别当前是哪个控制器下的方法】
$now_ac =CONTROLLER_NAME."-".ACTION_NAME;
$allow_ac = array('Index-left','Index-right','Index-head','Index-index','Manager-login','Index-modifypwd','Index-verifyImg');
$auth_ac = $auth_ac[0]['role_auth_ac'];//从数据库查询出来的有权限的页面if(!in_array($now_ac,$allow_ac) && $_SESSION['mg_id'] !=1 && strpos($auth_ac,$now_ac) === false){$this->error('没有访问权限',U("right"));                     }
//------左部列表为何不同管理显示不同的导航?【index.class.php/left(){}】------////  查询list操作列表//  @return 三维数组//      $arr['p_list']  包含所有顶级列表的二维数组//      $arr['c_list']  包含所有二级列表的二维数组//      上述两个组合成一个三维数组返回//function get_list(){$mg = M('cms_manager');$role = M('cms_role');$role_id = $mg->field("mg_role_id")->where("mg_id=$_SESSION[mg_id] ")->find();$auth_ids = $role->field("role_auth_ids")->where("role_id=$role_id[mg_role_id] ")->find();$sql = "SELECT auth_id,auth_name FROM  cms_auth  WHERE  auth_level='0'";if($_SESSION['mg_id'] !="1") $sql.= " and auth_id in ($auth_ids[role_auth_ids]) ";$p_list = $mg->query($sql);$sql = "SELECT auth_id,auth_pid,auth_name,auth_a FROM  cms_auth  WHERE  auth_level='1'";if($_SESSION['mg_id'] !="1") $sql.= " and auth_id in ($auth_ids[role_auth_ids]) ";$c_list = $mg->query($sql);$all_list=array("p_list"=>$p_list,"c_list"=>$c_list,);// show($all_list);exit;return $all_list;}
**一.rbac权限管理  【必须等项目大体作完,最后来做】**role base access (基于角色的访问权限控制)

sw_auth //权限表

      `auth_id`     主键`auth_name`   权限名称,`auth_pid`    父id,值:对应最高权限的ID,        它若是最高权限则没有,值为0【目的在于,方便下拉菜单显示,有个匹配,是谁的下拉菜单】`auth_c`      控制器,controller控制器 Goods ;它若是最高权限则没有,值无【目的在防止直接访问URL突破权限,规定你只能访问它】`auth_a`      操作方法,action  方法 showlist;它若是最高权限则没有,值无【目的在防止直接访问URL突破权限,规定你只能访问它】`auth_path`   全路径:【用户信息排序使用】                              【目的在权限管理LIST查看来排序,好看】① : 如果是顶级权限,全路径等于本记录主键值 (auth_id)② :如果不是顶级权限,全路径等于 "父级全路径-(中恒线)本记录主键值" (auth_pid-auth_id)`auth_level`  级别,                                                     【目的在于sql区分下拉菜单时,谁是1级菜单,谁是2级菜单】基本:0顶级权限  1次顶级权限  2次次顶级权限呈现缩进关系使用权限数据模拟:
            insert into sw_auth values (1,'商品管理',0,'','',1,0);insert into sw_auth values (2,'订单管理',0,'','',2,0);insert into sw_auth values (3,'广告管理',0,'','',3,0);insert into sw_auth values (4,'商品列表',1,'Goods','showlist',"1-4",1);insert into sw_auth values (5,'添加商品',1,'Goods','add',"1-5",1);insert into sw_auth values (6,'商品分类',1,'Goods','cate',"1-6",1);insert into sw_auth values (7,'用户评论',1,'User','comment',"1-7",1);insert into sw_auth values (8,'订单列表',2,'Order','showlist',"2-8",1);insert into sw_auth values (9,'订单打印',2,'Order','print',"2-9",1);insert into sw_auth values (10,'添加订单',2,'Order','add',"2-10",1);insert into sw_auth values (11,'广告列表',3,'Advert','showlist',"3-11",1);insert into sw_auth values (12,'广告位置',3,'Advert','position',"3-12",1);

sw_role //角色表

        `role_id`         主键`role_name`       '角色名称',`role_auth_ac`    '模块-操作',关联权限的控制器、方法连接的信息"Goods-showlist,Goods-add,Goods-cate"【目的在于,懂行人直接输入URL访问更多权限】`role_auth_ids`   外键'该角色的对应权限ID',"1,4,5,6" 关联权限的主键值用逗号连接的信息(如果有上级权限,也把上级权限的id进行关联)
insert into sw_role values (1, '经理', "1,4,5,6","Goods-showlist,Goods-add,Goods-cate");insert into sw_role values (2, '主管', "2,3,8,11","Order-showlist,Advert-showlist");
    **sw_admin //管理员表**`mg_id`     主键`mg_name`   管理员账户名`mg_pwd`    管理员密码`mg_time`   上次登录时间,`mg_role_id` 外键,角色id,二.通过模拟好的数据进行程序开发a)用户登录系统,根据具体角色显示,左边权限按钮b)在左边显示对应的权限信息i.用户登陆系统显示权限信息$_SESSION['mg_id']ii.根据SESSION['mg_id']信息获得角色信息['role_id']iii.根据['role_id']信息获得权限列表信息['auth_id,name']三.超级管理员不需要权限控制admina)在Index/left方法里边,若为admin,则显示全部权限if($_SESSION['mg_id'] != 1 ){$sql .= "  and auth_id in ($auth_ids)";}四.防止内行手输入URL访问更多权限加入判断1.用户访问的控制器和方法,必须和他对应的角色表里的【ac信息】比较2.`role_auth_ac`若有你访问的权限,则访问因为是后台每一个页面都要验证,把它写一个父类,把所有公共方法写入它,让所有后台方控制器继承它位置: Component\AdminController.class.php注意: 1.一些公有的方法,不进行权限限制2.系统管理员,不进行权限限制3.只允许访问角色对应的权限【好好看看if判断的写法,理解】维护三部分数据:角色,权限,1.角色 Admin/Role/showlist角色:显示角色列表信息,给角色分配权限在设置时,把已经有的权限显示出来2.权限维护

这篇关于ThinkPHP下的RBAC权限访问理解【笔记】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/952917

相关文章

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

NGINX 配置内网访问的实现步骤

《NGINX配置内网访问的实现步骤》本文主要介绍了NGINX配置内网访问的实现步骤,Nginx的geo模块限制域名访问权限,仅允许内网/办公室IP访问,具有一定的参考价值,感兴趣的可以了解一下... 目录需求1. geo 模块配置2. 访问控制判断3. 错误页面配置4. 一个完整的配置参考文档需求我们有一

C#实现访问远程硬盘的图文教程

《C#实现访问远程硬盘的图文教程》在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件,这次我们将给出一个完整的... 目录引言一. 远程硬盘功能展示二. 远程硬盘代码实现1. 底层业务通信实现2. UI 实现三. De

python通过curl实现访问deepseek的API

《python通过curl实现访问deepseek的API》这篇文章主要为大家详细介绍了python如何通过curl实现访问deepseek的API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... API申请和充值下面是deepeek的API网站https://platform.deepsee

Nginx 访问 /root/下 403 Forbidden问题解决

《Nginx访问/root/下403Forbidden问题解决》在使用Nginx作为Web服务器时,可能会遇到403Forbidden错误,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录解决 Nginx 访问 /root/test/1.html 403 Forbidden 问题问题复现Ng

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析