用户、角色、权限表的关系(mysql)
一,各个表格
1、用户表
CREATE TABLE `t_user` (
`id` varchar(40) NOT NULL,
`username` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
)
2、角色表
CREATE TABLE `t_role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`description` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
)
3、权限表
CREATE TABLE `t_permission` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`description` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
)
4、用户角色关系表
CREATE TABLE `user_role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(40) NOT NULL,
`role_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_user_role_t_role_1` (`role_id`),
KEY `fk_user_role_t_user_1` (`user_id`),
CONSTRAINT `fk_user_role_t_role_1` FOREIGN KEY (`role_id`) REFERENCES `t_role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_user_role_t_user_1` FOREIGN KEY (`user_id`) REFERENCES `t_user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
)
5、角色权限关系表
CREATE TABLE `role_permission` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`role_id` int(11) NOT NULL,
`permission_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_role_permission_t_permission_1` (`permission_id`),
KEY `fk_role_permission_t_role_1` (`role_id`),
CONSTRAINT `fk_role_permission_t_permission_1` FOREIGN KEY (`permission_id`) REFERENCES `t_permission` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_role_permission_t_role_1` FOREIGN KEY (`role_id`) REFERENCES `t_role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
)
6、测试数据
INSERT INTO `role_permission` VALUES ('1','1','1'), ('2','2','2'), ('3','3','3');
INSERT INTO `t_permission` VALUES ('1','小说收藏',NULL), ('2','小说发布',NULL), ('3','广告发布',NULL);
INSERT INTO `t_role` VALUES ('1','读者',NULL), ('2','作者',NULL), ('3','管理员',NULL);
INSERT INTO `t_user` VALUES ('u1','reader'), ('u11','reader1'), ('u2','author'), ('u22','author2'), ('u3','admin'), ('u33','admin2');
INSERT INTO `user_role` VALUES ('1','u1','1'), ('2','u2','2'), ('3','u3','3'), ('4','u11','1'), ('5','u22','2'), ('6','u33','3');
小说网站,用户表的设计。
用户有着“读者”,“作者”和“管理员”角色,角色有不同权限,如小说收藏,小说发布和广告发布
假定,用户和角色是一对一关系,即一个用户只有一个角色;角色和用户的关系是一对多关系,一个角色对应着多个用户。(方便后面对应英文单词直观反应着关系,如看到reader就是表示读者角色)
角色和权限的关系是多对多关系。即一个角色有着多种权限,同样,一个权限可以分给不同角色。
二、多对多查询
1、查询拥有某角色的用户信息
SELECT
u.id,u.username
FROM
t_user u,t_role r,user_role ur
WHERE
r.id=1 AND r.id=ur.role_id AND ur.user_id=u.id;
2、查询某用户的对应的角色。
SELECT
u.id,u.username,r.`name` role_name
FROM
t_user u,t_role r,user_role ur
WHERE
u.username LIKE 'a%' AND u.id=ur.user_id AND ur.role_id=r.id;
3、查询拥有某权限的角色
SELECT p.`name`,r.`name`
FROM
t_permission p,role_permission rp,t_role r
WHERE
p.`name`='小说发布' AND p.id=rp.permission_id AND rp.role_id=r.id;
4、查询某角色拥有的权限。
SELECT r.`name`,p.`name`
FROM
t_permission p,role_permission rp,t_role r
WHERE
r.`name`='作者' AND r.id=rp.role_id AND rp.permission_id=p.id;
5、查询某用户拥有的权限。
这里用户和角色是一对一关系,通过先查询用户的角色,再查询权限。(单行单例子查询)
SELECT p.`name`
FROM
t_permission p,role_permission rp,t_role r
WHERE
r.id=rp.role_id AND rp.permission_id=p.id AND r.id
IN
(SELECT r.id
FROM
t_user u,t_role r,user_role ur
WHERE
u.username ='author' AND u.id=ur.user_id AND ur.role_id=r.id);
6.查询拥有某权限的用户
权限与角色是多对多关系,角色和用户是一对一关系。
这个是查询是多行单列子查询
SELECT
u.id,u.username
FROM
t_user u,t_role r,user_role ur
WHERE
r.id=ur.role_id AND ur.user_id=u.id AND r.id
IN
(SELECT r.id
FROM
t_permission p,role_permission rp,t_role r
WHERE
p.`name`='小说发布' AND p.id=rp.permission_id AND rp.role_id=r.id);
用户、角色、权限表的关系(mysql)相关推荐
- mysql 用户角色权限表建立
建表sql [sql] view plaincopy #创建表使用的数据库 use springmvc; #权限表 create table authoritys( id_ smallint unsi ...
- Java论坛系统--3.系统用户角色权限表结构设计
通常我们的网站都有权限控制,就像一个公司有产品.开发.运维之分,各自负责各自的业务,相互独立,有相互协作,共同完成一个任务.拥有不同权限的用户查看不同的页面,进行不同的操作. Shiro是一种轻量级的 ...
- 用户·角色·权限·表的设计
设计一个灵活.通用.方便的权限管理系统. 在这个系统中,我们需要对系统的所有资源进行权限控制,那么系统中的资源包括哪些呢?我们可以把这些资源简单概括为静态资源(功能操作.数据列)和动态资源(数据),也 ...
- MySql练习 多对多表练习-用户角色权限表
前言:对数据库知识回顾,创建数据库.创建表.主键约束.外键约束.表关系(多对多). 一.表描述 一张用户表,一张角色表,一张权限表.一个用户对应多个角色,一个角色对应多个用户同时对应多个权限,一个权限 ...
- Mysql —— C语言链接mysql数据库,用户 角色 权限(用户根据角色的不同拥有增删改查的权限、用户有三种认证方式)
db_修改过(用户 角色 权限): 1.新增用户时候id 改为最大id值加一,之前用的select查看出来的记录数加一,删除后再增加会出错: 2.删除用户时候,若该用户创建过其他用户(不能改此用户名. ...
- 用户角色权限的简单理解
用户角色权限,它们之间的关系是用户依赖于角色,角色依赖于权限.权限四个属性:增.删.改.查.角色不仅依赖于权限,还依赖于目标,也就是数据源,简单理解是这个角色可以访问哪些资源. 用户权限大致就分三个级 ...
- 管理系统的用户角色权限
目录 RBAC1模型: RBAC2模型: RBAC3模型: RBAC0模型实现 用户.角色.权限表关系的设计(mysql) 业务逻辑思路 RBAC0模型: 这是权限最基础也是最核心的模型,它包括用户/ ...
- RBAC用户角色权限设计方案
RBAC用户角色权限设计方案 转自http://www.cnblogs.com/zwq194/archive/2011/03/07/1974821.html RBAC(Role-Based Acces ...
- 【深度解析RBAC用户-角色-权限设计方案,以及核心逻辑代码的讲解】
首先对于b2b.b2c等这一些网站后台,一般情况下都需要权限管理的设计与实现,对于这部分,通常是固定不变的,每次只需要做少量的改动即可. 如何设计这几张表呢? RBAC(基于角色的访问控制),也就是用 ...
最新文章
- 中国人民大学《组织行为学》_12怎样让员工快速融入群体?
- uva 12426 Counting Triangles 计算几何
- android 解决setbackgrounddrawable过时
- 【2018.5.12】模拟赛之一-ssl2413 排名【玄学】
- 前端自动化测试概览【超全面介绍】包你学废
- Java的多线程机制系列:(四)不得不提的volatile及指令重排序(happen-before)
- 微服务架构实战(五):选择微服务部署策略
- ER studio使用
- Jekyll 语句语法、功能的实现方法和结构介绍小手册
- jsp登录并实现邮箱激活功能
- Android 读取本地图片文件和读取图片的uri
- CJOJ 1308 【HNOI 2002 】营业额统计 / CodeVS 1296 营业额统计
- Python绘制气象风场
- 【转载】详细设计说明书模板
- 杭电ACM 1174
- CSS学习笔记——搭建京东购物车网页
- Deepin系统卸载alsa-base后导致系统无法启动
- lua 连接mysql_luasql连接mysql数据库
- yolov5从入门到精通
- python123外汇兑换程序,货币兑换程序python
热门文章
- 【Python脚本进阶】2.3、利用FTP与Web批量抓“ 肉机”(中):使用Ftplib暴力破解FTP用户口令
- 蓝桥杯试题 基础练习 十六进制转十进制
- 乐山计算机学校升学,乐山市计算机学校讲好升学故事
- vue源码解析之『我的数据去哪了』
- 如何制作属于自己的图片马
- Scott Mitchell 的ASP.NET 2.0数据教程之四十五::DataList和Repeater数据排序
- virtualbox桥接网卡设置(virtualbox桥接网卡未指定)
- 怎么通过硬盘装linux系统文件下载,通过硬盘上的镜像文件安装Linux操作系统
- JAVA webservice配置xfire
- RGB888与RGB565颜色