php RBAC权限控制简易版表结构 demo

基于PHP的企业级上班打卡签到系统Demo实战 这套系统我们已经在多家企业落地,平均减少考勤纠纷76%,HR每月节省40+小时核对时间。但它真正的意义不止于此。当你看到员工不再挤在门口打卡,而是从容走进办公室开始工作;当你知道没人再为“迟到一分钟被扣钱”而愤怒投诉;当你能用数据看清团队出勤趋势,提前发现异常流动苗头……你会发现,一个好的技术系统,不该是管控工具,而应是信任的桥梁。而这,正是我们写代码的意义所在。✨“系统无法杜绝人性之恶,但可以让善意走得更远。” —— 某客户CEO反馈。 阅读详情

RBAC的详细分析网上一大堆。

一.表的设计

① sw_manager 后台用户管理员表

② sw_role     角色表

③ sw_auth     具体权限表

sw_manager 后台用户管理员表

# Host: localhost  (Version: 5.5.53)
# Date: 2018-09-05 09:00:00
# Generator: MySQL-Front 5.3  (Build 4.234)

/*!40101 SET NAMES utf8 */;

#
# Structure for table "sw_manager"
#

DROP TABLE IF EXISTS `sw_manager`;
CREATE TABLE `sw_manager` (
  `mg_id` int(11) NOT NULL AUTO_INCREMENT,
  `mg_name` varchar(32) NOT NULL,
  `mg_pwd` varchar(32) NOT NULL,
  `mg_time` int(10) unsigned NOT NULL COMMENT '时间',
  `mg_role_id` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '角色id',
  PRIMARY KEY (`mg_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

#
# Data for table "sw_manager"
#

INSERT INTO `sw_manager` VALUES (1,'admin','123456',0,0),(2,'tom','123456',0,1),(3,'linken','123456',0,2),(4,'mary','123456',1387785044,2),(5,'yuehan','123456',1387785056,2);

sw_role     角色表

# Host: localhost  (Version: 5.5.53)
# Date: 2018-09-05 09:03:14
# Generator: MySQL-Front 5.3  (Build 4.234)

/*!40101 SET NAMES utf8 */;

#
# Structure for table "sw_role"
#

DROP TABLE IF EXISTS `sw_role`;
CREATE TABLE `sw_role` (
  `role_id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `role_name` varchar(20) NOT NULL COMMENT '角色名称',
  `role_auth_ids` varchar(128) NOT NULL DEFAULT '' COMMENT '权限ids,1,2,5',
  `role_auth_ac` text COMMENT '模块-操作',
  PRIMARY KEY (`role_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

#
# Data for table "sw_role"
#

INSERT INTO `sw_role` VALUES (1,'经理','1,4,19,5,6,2,8,9,3,11,12','Goods-showlist,Goods-add,Goods-cate,Order-showlist,Order-print,Advert-showlist,Advert-position,Goods-upd'),(2,'主管','1,4,18,5,6,7,2,8,9,10','Goods-showlist,Goods-add,Goods-cate,User-comment,Order-showlist,Order-print,Order-add,Goods-del');

sw_auth     具体权限表

# Host: localhost  (Version: 5.5.53)
# Date: 2018-09-05 09:04:54
# Generator: MySQL-Front 5.3  (Build 4.234)

/*!40101 SET NAMES utf8 */;

#
# Structure for table "sw_auth"
#

DROP TABLE IF EXISTS `sw_auth`;
CREATE TABLE `sw_auth` (
  `auth_id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `auth_name` varchar(20) NOT NULL COMMENT '名称',
  `auth_pid` smallint(6) unsigned NOT NULL COMMENT '父id',
  `auth_c` varchar(32) NOT NULL DEFAULT '' COMMENT '模块',
  `auth_a` varchar(32) NOT NULL DEFAULT '' COMMENT '操作方法',
  `auth_path` varchar(32) NOT NULL COMMENT '全路径',
  `auth_level` tinyint(4) NOT NULL DEFAULT '0' COMMENT '基别',
  PRIMARY KEY (`auth_id`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;

#
# Data for table "sw_auth"
#

INSERT INTO `sw_auth` VALUES (1,'商品管理',0,'','','1',0),(2,'订单管理',0,'','','2',0),(3,'广告管理',0,'','','3',0),(4,'商品列表',1,'Goods','showlist','1-4',1),(5,'添加商品',1,'Goods','add','1-5',1),(6,'商品分类',1,'Goods','cate','1-6',1),(7,'用户评论',1,'User','comment','1-7',1),(8,'订单列表',2,'Order','showlist','2-8',1),(9,'订单打印',2,'Order','print','2-9',1),(10,'添加订单',2,'Order','add','2-10',1),(11,'广告列表',3,'Advert','showlist','3-11',1),(12,'广告位置',3,'Advert','position','3-12',1),(13,'系统管理',0,'','','13',0),(14,'角色管理',13,'Role','showlist','13-14',1),(15,'权限管理',13,'Auth','showlist','13-15',1),(16,'会员管理',0,'User','showlist','16',0),(17,'商品回收站',1,'Goods','huishou','1-17',1),(18,'商品删除',4,'Goods','del','1-4-18',2),(19,'商品修改',4,'Goods','upd','1-4-19',2),(20,'管理员列表',13,'Manager','showlist','13-20',1),(21,'apple',5,'8x','aa','1-5-21',2);

 

操作:

a.根据用户登录信息进行相应权限展示

  1. 根据权限ids信息查询具体权限信息进而显示
  2. 根据角色id信息获得权限列表ids信息
  3. 根据session信息获得角色role_id信息
  4. 用户登录系统显示权限信息 $_SESSION[‘mg_id’]
  5. 超级管理员不要进行权限控制admin。
        //根据session用户id信息查询角色id信息
        $sql = "select * from sw_manager where mg_id=".$_SESSION['mg_id'];
        $minfo = D()->query($sql);
        $role_id = $minfo[0]['mg_role_id'];
        //根据角色信息获得权限ids的信息
        $sql = "select * from sw_role where role_id=".$role_id;
        $rinfo = D()->query($sql);
        $auth_ids = $rinfo[0]['role_auth_ids'];
        //根据$auth_ids查询全部拥有的权限信息
        //① 获得顶级权限
        $sql = "select * from sw_auth where auth_level=0 ";
        //如果是admin管理员要现实全部权限
        if($_SESSION['mg_id'] != 1){
            $sql .= " and auth_id in ($auth_ids)";
        }
        $p_info = D()->query($sql);
        //② 获得次顶级权限
        $sql = "select * from sw_auth where auth_level=1";
        //如果是admin管理员要现实全部权限
        if($_SESSION['mg_id'] != 1){
            $sql .= " and auth_id in ($auth_ids)";
        }
        $s_info = D()->query($sql);
        
        $this -> assign('pauth_info',$p_info);
        $this -> assign('sauth_info',$s_info);
        $this -> display();

b.控制翻墙浏览以及超级管理员不设限

虽然显示是各类角色应该看到的权限,但是可以通过修改url来查看不属于自己的权限。这个时候需要在所有操作前进行判断,具体做法,加个中间介质(父控制器类),所有操作必须通过它。

<?php

//普通控制器的父类
namespace Component;
use Think\Controller;
 
class AdminController extends Controller{
    //构造方法
    function __construct() {
        //先执行父类的构造方法,否则系统要报错
        //因为原先的构造方法默认是被执行的
        parent::__construct();
        
        
        //CONTROLLER_NAME ---Goods
        //ACTION_NAME  ----showlist
        //当前请求操作
        if(!$_SESSION['mg_id']){
            $this -> error('未登录',U("Manager/login"));
        }else{
            $now_ac = CONTROLLER_NAME."-".ACTION_NAME;
            
            if($_SESSION['mg_id'] != 1){
                //过滤控制器和方法,避免用户非法请求
                //通过角色获得用户可以访问的控制器和方法信息
                $sql ="select role_auth_ac from sw_manager a join sw_role b on a.mg_role_id=b.role_id where a.mg_id=".$_SESSION['mg_id'];
                $auth_ac = D()->query($sql);
                $auth_ac = $auth_ac[0]['role_auth_ac'];
                
                //判断$now_ac是否在$auth_ac字符串里边有出现过
                //strpos函数如果返回false是没有出现,返回0 1 2 3表示有出现
                //管理员不限制
                //默认以下权限没有限制
                //Index/left  Index/right  Index/head  Index/index  Manager/login
                $allow_ac = array('Index-left','Index-right','Index-head','Index-index','Manager-login');
                if(!in_array($now_ac,$allow_ac) && $_SESSION['mg_id'] !=1 && strpos($auth_ac,$now_ac) === false){
                    $this -> error('没有权限访问',U("Index/index"));
                }
            }
        }
        
    }
}

 

PHP实现钉钉ISV应用开发实战Demo 钉钉开放平台为企业级应用提供了丰富的接口与生态支持,ISV(独立软件供应商)在其中扮演着至关重要的角色。通过开发定制化应用,ISV能够帮助企业在钉钉生态中实现业务流程自动化、数据集成与高效协作。本章将介绍钉钉ISV应用的基本架构,包括前端页面集成、后端服务对接、OAuth认证流程以及API调用机制。同时,我们还将探讨ISV应用在企业办公场景中的典型用途,如审批流程、考勤管理、数据看板等。 阅读详情

相关推荐

php 角色权限菜单设置demo

树型结构,角色权限。 直接可以运行的PHP demo. //只适合两级菜单 $data=array( 1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'), 2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'), 3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'), 4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'), 5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三') ); $tree = new Tree; // new 之前请记得包含tree文件! $tree->tree($data); // 数据格式请参考 tree方法上面的注释! // 下拉菜单选项使用 get_tree方法 $html=''; $str = "\$spacer\$name"; $html .= $tree->get_tree(0,$str,-1).''; $script=' '; echo $script.$html;

vue后台项目基于RBAC实现权限管理

一、RBAC(Role-Based Access control) RBAC中文意为基于角色的权限控制,是一个权限设计思想,也就是说根据不同的用户角色,有不同的权限控制,例如权限页面,权限功能。 使用场景:登录后每个用户看到的菜单界面是不同的,操作的功能也不一样,例如老板、财务和员工,老板的级别就高级一点了,所有的菜单栏都可以访问,而财务只能看见考勤和对应的工资,而员工只能看见自己的个人信息。 这时候就产生了三个关系,分为用户、角色、权限点 用户:每个账号的人 角色:在公司中什么位置映射这有什

^_^ 8093

hpm6750evk2开发板(一)菜鸟入门

hpm6750与我们平时常用的stm单片机在开发环境和开发方法上有很大的区别,所以上手还是需要花一点时间的,拿到板子先不要急着上电调试,我们先找资料学习一下了,免得多走冤枉路,以下是我整理的一些学习资源,包括开发板使用手册、芯片SDK、开发工具、视频资料等,建议先把使用手册和学习视频先看了,再取搭建环境测试。最近刚入手一块hpm6750evk2开发板,花了几天时间学习,算是菜鸟入门了,今天分享一下学习过程。看完资料后,把开发工具安装上,下一篇文章我们分享一下调试工程的过程和遇到的问题。

Silas1750的博客 3083

后台管理系统DEMO

该项目后端使用SpringBoot+MyBatisPlus+JWT,前端使用Vue3+Vite2+TS+Pinia+Axios+ElementPlus等简单技术栈,实现了一个简约精致版的后台管理系统,包含非常基础的rbac权限功能,可以增删改查角色、用户、权限,角色添加权限、添加用户(可自行实现用户处分配角色)、登录登出、修改密码、修改个人信息(修改头像待完善,此基础版本不包含)。最后感谢chatgpt的大力帮助。

如无必要勿增实体 873

电蚊拍为什么能秒杀蚊子?深入解析两种四倍压整流电路设计差异

本文深入解析电蚊拍秒杀蚊子的核心原理——四倍压整流电路设计,对比对称式与级联式两种方案的性能差异。通过详细电路分析、实测数据对比和选型建议,揭示高压电路设计的关键技术要点,为电子爱好者和工程师提供实用参考。

rust6ferris的博客 748

手把手教你理解ARM SoC中的PPU:电源管理IP的配置与实战避坑指南

本文深入解析ARM SoC中的PPU(Power Policy Unit)电源管理IP,提供详细的配置指南与实战避坑技巧。从PPU基础架构、寄存器配置到与PCSM的协同工作,全面介绍如何优化电源管理策略,解决常见配置误区,并分享高级调试与性能优化方法,助力工程师提升低功耗SoC设计效率。

weixin_28693447的博客 478

「分享」基于vue-element+laravel8.x+casbin 我写了一个前后端分离的rbac管理后台

基于 vue-element-admin laraveljwtcasbin 整合的前后端分离的rbac权限管理系统 功能和介绍 系统采用前后端分离架构,是一个企业后台解决方案。 前端框架基于vue-element-admin ,后台框架使用的是PHP最热门的框架laravel 控制权限使用的是casbin轻量访问控制框架 如何这是你第一个学习的前后端分离项目的项目 你可以学习到laravel的一些最新用法 路由、中间件、验证器、前后端分离下 JWT校验、以及laravel的全局异常处理、业务和服务分离。

qq_42032117的博客 1734

UE4游戏开发:GameInstance与GameMode的实战应用与避坑指南

本文深入解析了UE4中GameInstance与GameMode的核心差异与实战应用。GameInstance作为贯穿游戏进程的全局单例,负责跨关卡数据持久化与系统管理;而GameMode则定义特定关卡内的游戏规则与逻辑,随关卡加载销毁。文章通过数据存储、动态模式切换及网络游戏等场景,提供了清晰的应用指南与常见避坑方案,帮助开发者构建更健壮的UE4游戏架构。

kubernetes8ctl的博客 230

php权限管理demo,thinkphp集成系列之rbac的升级版auth权限管理系统demo

权限管理基本是作为网站的标配了;除非是像博客这类个人使用的;否则权限管理的重要性不言而喻;今个就来写写auth权限管理;thinkphp已经内置了auth权限类位于:/ThinkPHP/Library/Think/Auth.class.php执行里面的sql生成3张表auth_rule、auth_group、auth_group_access;然后自己再建一张users表;当然起其他的名字也是可以...

weixin_35962107的博客 286

激光可燃气体传感器DIY指南:从TDLAS原理到STM32实战(附代码)

本文详细介绍了如何DIY激光可燃气体传感器,从TDLAS原理到STM32实战,包括硬件选型、光路搭建、电子系统设计和嵌入式软件开发。通过TDLAS技术实现高灵敏度甲烷检测,适合工业安全和环境监测应用。附有完整代码和实用调试技巧,帮助开发者快速掌握光学气体检测技术。

fanta的博客 440

数字IC设计技能篇之如何在RTL级降低功耗?

以上就是本次降低芯片功耗的部分心得和收获,由于是在芯片设计阶段还没办法后端直接给出power的报告,前端一般使用spyglass和fsdb来进行功耗分析,后续会更新如何使用spyglass在前仿阶段进行power的分析,以及持续更新有关RTL级降低功耗的相关内容。

mzynk的博客 1202

用户角色及权限管理设计实例(基于RBAC模型)

文章目录权限控制 权限控制 RBAC(Role-Based Access Control),基于角色的访问控制。做权限控制系统最常见的方式就是基于此模型的。它的基本思想就是:把资源能否访问、操作能否执行设定为权限;设定不同角色配对权限,使某种权限在某种角色下为被允许状态;最后再根据现实的组织方式为每用户分配角色。 以电视剧《潜伏》为背景举例,我们要为保密局天津站建设一个管理系统,这里就要理清相关人员的各种关系。天津站的组织关系如下 一把手是站长吴敬中,下设两个部门:机要室和行动队。 机要室主任为余则成。

小龙狗的博客 3万+

SMARTFORMS实战:用Template+Loop实现复杂表格布局(附避坑指南)

本文深入解析了SMARTFORMS中Template与Loop组合实现复杂表格布局的实战技巧,突破传统TABLE组件的限制。通过多级表头、单元格合并等案例演示,提供从基础架构搭建到动态数据绑定的完整解决方案,并分享性能优化与异常处理的最佳实践,助力开发者高效应对企业级报表设计挑战。

numpy6sculptor的博客 804

php api权限控制,关于接口权限控制以及rbac

分端实现权限控制最常见的接口权限控制就是分端形式了,不同的端实现不同的接口,一个用户登录后,只能访问这个端的接口,而不能去访问其他端的接口.例如:商城有商家端,管理端,买家端,各个端之间账号互不相通.每个端对订单的操作逻辑也不一样用户端只能新建,查看订单商家端只能查看订单,发货订单管理端只能查看订单代码结构大致为:├──Admin管理端│└──Order订单│└──...

weixin_36212212的博客 802

从零学懂车载 TSN(二):802.1AS、Qbv、Qbu 是如何让 Ethernet “按时发送”的?

假设有两台设备: ECU A 认为: 但 Switch B 认为: 如果我们规定: 问题就来了。ECU:Switch:整个调度立即失效。因此 TSN 要做时间调度,第一件事就是:这就是:IEEE 802.1AS 定义时间敏感网络里的:工程中通常会看到:gPTP也就是:generalized Precision Time Protocol可以先简单理解成: 核心表达:所有 TSN 节点使用共同时间。后面抓包时你会经常遇到: 刚入门时不用急着研究每个 bit。先搞清楚它们解决什么问题。两个设备连接: A 需要知

struggle_22_58的博客 48

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

PHP实现医疗数据加密导出与RBAC权限控制实战

数据加密与访问控制是保障信息系统安全的核心技术。加密技术通过对数据进行编码转换,确保其在存储和传输过程中的机密性,防止未授权访问。访问控制则通过权限模型管理用户对资源的操作范围,其中基于角色的访问控制(RBAC)是广泛应用的设计范式。在工程实践中,尤其在医疗健康等敏感领域,将加密技术与细粒度权限控制结合,能有效实现数据全生命周期的安全防护。本文以PHP技术栈为例,深入探讨如何利用OpenSSL进行AES-256-CBC文件加密,并结合RBAC模型与业务逻辑校验,构建一套支持角色差异化数据导出的安全方案,涵盖

weixin_33951761的博客 468

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

thinkphp集成系列之rbac的升级版auth权限管理系统demo

权限管理基本是作为网站的标配了; 除非是像博客这类个人使用的;否则权限管理的重要性不言而喻; 今个就来写写auth权限管理; thinkphp已经内置了auth权限类位于:/ThinkPHP/Library/Think/Auth.class.php 执行里面的sql生成3张表auth_rule、auth_group、auth_group_access; 然后自己再建一

白俊遥的博客 5655

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Symfony Demo Application安全机制详解:用户认证与权限控制

Symfony Demo Application是一个基于Symfony框架构建的示例应用,其安全机制采用了Symfony Security组件提供的完整解决方案,涵盖用户认证、权限控制、CSRF防护等核心功能。本文将深入解析该应用的安全架构,帮助开发者理解Symfony应用的安全实现方式。 ## 一、用户认证体系:从配置到实现 Symfony的安全认证体系通过`config/packages

gitblog_00824的博客 984

ThinkPHP框架使用心得三 RBAC权限控制(1)使用

  最近有点小忙,好久没有学习了。。。我忏悔。。。。   RBAC英文全称Role-Based AccessControl。即基于角色的权限控制。它的权限控制原理是将个项目-模块-操作的使用权限分配给角色组。然后将用户分到各用户组中,当然,一个用户可能有多个用户组。这样用户从属于用户组后就具有了该用户组的相关操作权限。ThinkPHP中有一个封装的很好的RBAC类库,十分好用的说。同时官方也提...

weixin_30607029的博客 186

tp3.2.3权限控制一之详解及demo

一、首先需明确TP3.2.3的权限控制是怎么实现的 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有多个角色,每一个角色拥有多个权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多...

铁柱的博客 7367

工控协议解构方法论:物理层、状态机与语义字典三要素

工控协议并非标准API,而是设备固件与通信栈之间的状态机契约。理解其本质需从物理层时序约束出发,厘清RS485/TCP等载体的实测容忍阈值;继而建模会话层状态流转,如S7协议的JOB→ACK→PDU多阶段握手;最终落地于应用层语义映射,破解FINS的SA1字段、S7的DB编号等厂商‘黑话’。该方法论将协议接入从手册抄写升级为可复用的工程能力,支撑Modbus TCP、西门子S7comm、欧姆龙FINS等主流协议在中小产线快速部署与故障定位,显著提升个人开发者对非标设备的现场兼容性与交付确定性。

weixin_34067102的博客 280

windows下Yii2搭建完美后台并实现rbac权限控制实例教程

1、安装yii2composer自行安装,请参考yii安装下面是我安装yii2 composer命令,供参考php composer.phar create-project yiisoft/yii2-app-advanced 你的项目路径2、配置数据库2.1、配置数据修改common/config/main-local.php的配置,以mysql为例,如下图图中的host、dbname、usern...

他乡幻想的专栏 2890

探索高效权限管理新境界:**Laravel-Casbin-Admin**,打造你的定制化RBAC系统

探索高效权限管理新境界:Laravel-Casbin-Admin,打造你的定制化RBAC系统 项目介绍 欢迎来到Laravel-Casbin-Admin的世界——一个将现代前端技术与成熟后端框架完美融合的RBAC(Role-Based Access Control)权限管理系统。依托Vue-ELEMENT-ADMIN的强大前端能力和Laravel的优雅后端设计,加上Casbin的灵活权限模型,这个...

gitblog_00003的博客 422

php 利用反射机制完成动态用户权限(RBAC)

<?php class duoduo{ /** * 这是pay方法的注释 * @return string */ public function pay(){ return '我是 pay 方法'; } /** * 这是cancle方法的注释 * @return string */ public function cancel(){ return '我是 cancl

weixin_44320900的博客 594

yii 权限分级式访问控制的实现(非RBAC法)——已验证

验证和授权——官方文档: http://www.yiichina.com/guide/topics.auth http://www.yiiframework.com/doc/guide/1.1/zh_cn/topics.auth 相关类参考手册: http://www.yiichina.com/api/CWebUser http://www.yiichina.com/api/CAcces...

weixin_34409741的博客 87
上一篇: php换行符不起作用
下一篇: thinkphp 3.2.3
阿……莫西林
博客等级 码龄9年 42粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值