当前位置: 首页 > news >正文

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
http://www.cnnetsun.cn/news/3712732.html

相关文章:

  • 技术专家如何突破职业瓶颈:从编码到协作的转变
  • Oracle的sql语句3
  • 物联网安全:SE050与PIC18F46K22硬件加密方案
  • Python串口通信实战:PySerial库应用与物联网开发
  • 3步轻松下载B站视频:大会员4K和充电专属视频离线观看指南
  • 物联网设备硬件安全方案:SE050芯片实战指南
  • 【linux】CentOS 报错:There are no enabled repos;yum repolist为0,yum list 正常,yum 安装无法使用的解决方法
  • 直流、步进、伺服电机选型指南:从原理到实战,告别选型难题
  • PUBG-Logitech压枪脚本:从零开始打造你的智能射击辅助系统
  • 破局的第一性原理
  • 元素垂直居中
  • 2026年|外贸人必看!热门外贸独立站谷歌SEO服务商深度测评
  • 如何高效应用Poppins字体:面向初学者的完整实践指南
  • 专科生降低AI检测率的实用技巧与工具测评
  • 从Java后端到大模型开发:工程师转型实战指南
  • 为什么你的AI副业总在加班?:4类时间伪勤奋诊断表+实时监控SOP,今晚就能启用
  • ESP32-C6点灯报错全解析:从环境搭建到代码调试的完整排错指南
  • TPIC7710EVM评估板实战指南:从硬件解析到软件调试的汽车电子电机驱动验证
  • 淘宝客APP异构数据对接:多电商平台API聚合与高延迟风险应对方案
  • 数据库的相关概念
  • MCP协议零基础入门:从概念到第一个Server(基于2026-07-28 RC版)
  • 企业私有化镜像部署方案与DevOps流水线集成:构建自动化的制品交付链路
  • 如何快速解决DirectX 1-7游戏兼容性问题:DDrawCompat完整方案
  • Anthropic联手Cognizant 企业AI落地比想象中难
  • Google发布网络安全报告 工具堆够用了吗
  • Visual C++运行库终极修复指南:如何5分钟解决所有Windows软件兼容性问题
  • 纽扣电池物联网设备的电源管理优化方案
  • 半路出家——初入IT
  • Java+Vue全栈猫咖管理系统开发实践
  • ES初探!