用户、角色、权限表的关系(mysql)

用户、角色、权限表的关系(mysql)一,各个表格1、用户表CREATETABLE`t_user`( `id`varchar(40)NOTNULL, `username`varchar(20)NOTNULL, PRIMARYKEY(`id`))2、角色表CREATETABLE`t_role`( `id`int(11)NOT

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一,各个表格

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

)

用户、角色、权限表的关系(mysql)

 

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;

 用户、角色、权限表的关系(mysql)

 

 

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;

 用户、角色、权限表的关系(mysql)

 

 

 

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;

 

 用户、角色、权限表的关系(mysql)

 

 

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;

 用户、角色、权限表的关系(mysql)

 

 

 

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

 

 用户、角色、权限表的关系(mysql)

 

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)


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188290.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker镜像源_云原生技术

    docker镜像源_云原生技术Docker镜像的详细讲解,如何安装Docker、配置Docker镜像加速以及操作Docker镜像。

    2022年9月22日
    3
  • 数据结构实验哈夫曼编码算法的实现_哈夫曼编码算法的实现

    数据结构实验哈夫曼编码算法的实现_哈夫曼编码算法的实现一、什么是赫夫曼编码哈夫曼编码(HuffmanCoding),又称霍夫曼编码,是一种编码方式,可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来

    2022年8月16日
    8
  • 服务器推送技术

    服务器推送技术需求与背景之前所有的请求都是浏览器发起,浏览器本身没有接受请求的能力。所以一些特殊需求都是用ajax轮询的方式来实现的。比如:股价展示页面实时的获取股价更新赛事的文字直播,实时更新赛况通过页

    2022年7月3日
    28
  • C++和Java怎么选择,哪个更好找工作?「建议收藏」

    C++和Java怎么选择,哪个更好找工作?「建议收藏」Java和C++各有各的优势,至于选择什么方向要看你的兴趣爱好,只要你基础扎实我相信找工作都不难,而且语言都是相通的。从两者语言入门来说:Java入门相对简单,C++入门相对难,精通更难!从学习侧重来说:Java侧重于企业级应用开发,C++则注重底层应用开发。从就业来说:C++前期工资要高,工作机会少。Java招聘多,工作机会多。从前景来说:Java、C++长期在编程排行榜前几位,所以学习哪个都可以。从未来来说:无论你学习Java还是学习C++,只要有多年的经验,工资都会高,不过在工作期

    2022年7月17日
    16
  • Java学习路线总结(书籍、视频推荐篇)[通俗易懂]

    Java学习路线总结(书籍、视频推荐篇)[通俗易懂]立志存高远,笃行践初心三更灯火五更鸡,正是男儿读书时。黑发不知勤学早,白首方悔读书迟。立志,标定人生方向;奋斗,创造人生价值,二者相辅相成,互相促进。大部分程序员的「目标」都是成为一名优秀的工程师,一名可以统览全局的「架构师」。千里之行始于足下对于大部分普通人而言,成为一名优秀的架构师还是有一定难度的,「千里之行始于足下,一步一个脚印,慢慢来」。????粉丝专属福利:包邮送书3本,如下书单四选一。????获取方式:1、参与文末投票,点赞,收藏即有机会获得精美图书一

    2022年5月16日
    48
  • goland 2021.9.1激活码_最新在线免费激活

    (goland 2021.9.1激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月26日
    112

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号