一,各个表格

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);

用户、角色、权限表的关系相关推荐

  1. Java论坛系统--3.系统用户角色权限表结构设计

    通常我们的网站都有权限控制,就像一个公司有产品.开发.运维之分,各自负责各自的业务,相互独立,有相互协作,共同完成一个任务.拥有不同权限的用户查看不同的页面,进行不同的操作. Shiro是一种轻量级的 ...

  2. 用户·角色·权限·表的设计

    设计一个灵活.通用.方便的权限管理系统. 在这个系统中,我们需要对系统的所有资源进行权限控制,那么系统中的资源包括哪些呢?我们可以把这些资源简单概括为静态资源(功能操作.数据列)和动态资源(数据),也 ...

  3. mysql 用户角色权限表建立

    建表sql [sql] view plaincopy #创建表使用的数据库 use springmvc; #权限表 create table authoritys( id_ smallint unsi ...

  4. MySql练习 多对多表练习-用户角色权限表

    前言:对数据库知识回顾,创建数据库.创建表.主键约束.外键约束.表关系(多对多). 一.表描述 一张用户表,一张角色表,一张权限表.一个用户对应多个角色,一个角色对应多个用户同时对应多个权限,一个权限 ...

  5. RBAC用户角色权限设计方案

    RBAC用户角色权限设计方案 转自http://www.cnblogs.com/zwq194/archive/2011/03/07/1974821.html RBAC(Role-Based Acces ...

  6. 【深度解析RBAC用户-角色-权限设计方案,以及核心逻辑代码的讲解】

    首先对于b2b.b2c等这一些网站后台,一般情况下都需要权限管理的设计与实现,对于这部分,通常是固定不变的,每次只需要做少量的改动即可. 如何设计这几张表呢? RBAC(基于角色的访问控制),也就是用 ...

  7. Web开发中的用户角色权限设计总结

    在Web开发中关于权限管理设计大抵涉及到两个方面:一:功能方面权限设计:二:资源方面权限设计.二者比较来看,功能方面权限的可重用性更高. 1.关于权限: 按照角色权限的最简单的设计 名称 描述 用户 ...

  8. java用户角色权限管理 只显示姓_扩展RBAC用户角色权限设计方案

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...

  9. RBAC用户角色权限设计方案(转)

    RBAC用户角色权限设计方案 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限 ...

  10. 设计OA系统的用户-角色-权限分配

    转载:http://www.cnblogs.com/jsping/archive/2013/01/23/2872972.html 设计OA系统的用户-角色-权限分配 一,前言  本文主要讲述在OA系统 ...

最新文章

  1. 瞄准医疗数据安全四大风险 东软DBA如何绝地阻击
  2. HGOI 20181103 题解
  3. .net MySql
  4. 斗地主程序设计c语言,C语言斗地主游戏v0.1
  5. php学历低,学历低学起php来难不难
  6. 【桶】220.存在重复元素 III 【LeetCode】
  7. powerbuilder提示不是下拉窗口_为什么过去状态管理不是问题?
  8. 在循环递增一次的数组中插入元素
  9. 批量修改栏目名_Endnote中英文混排批量修改小技巧
  10. win10设置pg/pc接口_旧电脑升级!使用固态硬盘必做的5件事,让win10操作流畅如win7...
  11. PHP加密解密函数之Crypt
  12. Python地理数据处理相关模块的安装方法
  13. solr导入mysql时间类型_docker 安装solr 导入mysql时报错
  14. 对于相同Bean,在父应用上下文中定义的切面,在子应用上下文中会生效吗?
  15. 杭电2567寻梦(字符串处理)
  16. 什么是android应用程序未安装,应用程序未安装,教您安卓系统应用程序未安装怎么解决...
  17. 6691. 【2020.06.05省选模拟】六道剑「一念无量劫」
  18. NRF52832官方SDK介绍
  19. 你不知道的javascript读书记录
  20. 恢复时间目标(RTO)和恢复点目标(RPO)的差异

热门文章

  1. android studio 设置打不开,关于Android studio 设置点击打不开的解决
  2. mysql系列之-查重语句
  3. 大家快来玩转盘抽奖游戏(走在网页游戏开发的路上(七))
  4. 带你去吃江南排名第一好吃的包子:丁莲芳千张包子
  5. PostgreSql linux 常用命令
  6. java jxl 教程,java action jxl 生成并下载excel
  7. 应届生:如果春招还拿不到offer怎么办?
  8. ADSL、宽带上网、光缆和拨号上网之间的区别?
  9. 真正从0开始用Unity3D制作类战地2玩法的类龙之谷、王者荣耀的手游(暨全平台游戏)
  10. 小程序体验版跟测试版上传照片失败的问题 及图片上传的方法