news 2026/7/28 16:44:38

RBAC表设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RBAC表设计

下面是权限框架会用到的五张最基础的表设计
数据库采用 mysql

1、表设计

用户表

DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, `email` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; /*Data for the table `user` */ insert into `user`(`id`,`username`,`password`,`email`) values (1,'admin','admin',NULL),(2,'zhangsan','admin',NULL),(3,'hechen','admin',NULL);

用户、角色关联表

DROP TABLE IF EXISTS `user_role`; CREATE TABLE `user_role` ( `user_id` bigint(20) NOT NULL, `role_id` bigint(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; /*Data for the table `user_role` */ insert into `user_role`(`user_id`,`role_id`) values (2,2);

权限表

DROP TABLE IF EXISTS `permission`; CREATE TABLE `permission` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `resource` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; -- 数据 insert into `permission`(`id`,`name`,`resource`) values (6,'员工删除','employee:delete'),(7,'员工保存','employee:save'),(8,'员工编辑','employee:edit'),(15,'用户列表','employee:list'),(16,'查询用户列表','user:list'),(17,'增加用户','user:add'),(18,'修改用户','user:update'),(19,'删除用户','user:delete'),(20,'查询用户','user:get');

角色表

DROP TABLE IF EXISTS `role`; CREATE TABLE `role` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `sn` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; /*Data for the table `role` */ insert into `role`(`id`,`name`,`sn`) values (1,'部门经理','deptMgr'),(2,'人事经理','empMgr');

角色、权限关联表

CREATE TABLE `role_permission` ( `role_id` bigint(20) NOT NULL, `permission_id` bigint(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; /*Data for the table `role_permission` */ insert into `role_permission`(`role_id`,`permission_id`) values (2,7),(2,15);

一键导入表

CREATE DATABASE /*!32312 IF NOT EXISTS*/`shiro` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `shiro`; /*Table structure for table `permission` */ DROP TABLE IF EXISTS `permission`; CREATE TABLE `permission` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `resource` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; /*Data for the table `permission` */ insert into `permission`(`id`,`name`,`resource`) values (6,'员工删除','employee:delete'),(7,'员工保存','employee:save'),(8,'员工编辑','employee:edit'),(15,'用户列表','employee:list'),(16,'查询用户列表','user:list'),(17,'增加用户','user:add'),(18,'修改用户','user:update'),(19,'删除用户','user:delete'),(20,'查询用户','user:get'); /*Table structure for table `role` */ DROP TABLE IF EXISTS `role`; CREATE TABLE `role` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `sn` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; /*Data for the table `role` */ insert into `role`(`id`,`name`,`sn`) values (1,'部门经理','deptMgr'),(2,'人事经理','empMgr'); /*Table structure for table `role_permission` */ DROP TABLE IF EXISTS `role_permission`; CREATE TABLE `role_permission` ( `role_id` bigint(20) NOT NULL, `permission_id` bigint(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; /*Data for the table `role_permission` */ insert into `role_permission`(`role_id`,`permission_id`) values (2,7),(2,15); /*Table structure for table `user` */ DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, `email` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; /*Data for the table `user` */ insert into `user`(`id`,`username`,`password`,`email`) values (1,'admin','admin',NULL),(2,'zhangsan','admin',NULL),(3,'hechen','admin',NULL); /*Table structure for table `user_role` */ DROP TABLE IF EXISTS `user_role`; CREATE TABLE `user_role` ( `user_id` bigint(20) NOT NULL, `role_id` bigint(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; /*Data for the table `user_role` */ insert into `user_role`(`user_id`,`role_id`) values (2,2);

2、表操作

基础查询

SELECT u.* FROM USER u ; -- 用户权限关联表 SELECT ur.* FROM user_role ur; -- 权限表 SELECT p.* FROM permission p; -- 角色表 SELECT r.* FROM role r; -- 用户角色、权限关联表 SELECT rp.* FROM role_permission rp;

关联查询

-- 查找某个用户关联的角色 SELECT u.id, u.`username`, r.`name`, r.`sn` FROM USER u, user_role ur, role r WHERE u.`id` = ur.`user_id` AND ur.`role_id` = r.`id` AND u.id = 2 -- 查找某个用户的权限 SELECT u.id, u.`username`, r.`name`, p.name, p.resource FROM USER u, user_role ur, role r, permission p, role_permission rp WHERE u.`id` = ur.`user_id` AND ur.`role_id` = r.`id` AND r.`id` = rp.role_id AND rp.permission_id = p.id AND u.id = 2
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 16:43:54

技术专家如何突破职业瓶颈:从编码到协作的转变

1. 职场困境:技术专家为何遭遇边缘化?那天晚上11点,我收到老同事李明的消息:"我被调离核心项目组了。"这位年薪85万的高级工程师,刚过30岁生日,技术能力在团队里数一数二。但让他离开核心项目的不…

作者头像 李华
网站建设 2026/7/28 16:39:55

Oracle的sql语句3

1.exists关键字 存在 与之对应的: no exists 不存在看如下案例 -- 和SMITH在同一个岗位,同一个部门的员工 select ENAME, DEPTNO, JOB from EMP where (DEPTNO, JOB) in (select DEPTNO, JOB from EMP where ENAME SMITH); -- 查询和smith在同一个岗位的员工 select m.ENAME, …

作者头像 李华
网站建设 2026/7/28 16:39:24

物联网安全:SE050与PIC18F46K22硬件加密方案

1. 物联网安全现状与SE050的定位在2023年全球物联网设备数量突破430亿台的背景下,安全事件同比增长了67%。我曾参与过多个工业物联网项目,亲眼目睹过因密钥硬编码导致整条产线被勒索软件加密的案例。恩智浦的EdgeLock SE050系列安全元件正是为解决这类问…

作者头像 李华
网站建设 2026/7/28 16:38:56

Python串口通信实战:PySerial库应用与物联网开发

1. Python串口通信基础与核心概念串口通信作为嵌入式开发和硬件交互的基础手段,在物联网设备调试、工业控制等领域有着广泛应用。Python凭借其简洁语法和丰富生态,成为快速实现串口通信的理想选择。与C/C等传统语言相比,Python的串口编程可以…

作者头像 李华
网站建设 2026/7/28 16:38:47

3步轻松下载B站视频:大会员4K和充电专属视频离线观看指南

3步轻松下载B站视频:大会员4K和充电专属视频离线观看指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 你是否曾经遇到过…

作者头像 李华
网站建设 2026/7/28 16:38:17

物联网设备硬件安全方案:SE050芯片实战指南

1. 为什么物联网设备需要硬件级安全方案在智能家居和工业物联网项目中,我经常遇到这样的困境:设备固件被恶意篡改、通信数据被中间人窃取、甚至整批设备被伪造身份接入网络。传统软件加密方案存在致命缺陷——当攻击者物理接触设备后,所有安全…

作者头像 李华