用户、角色、权限表的关系(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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 普通最小二乘法回归 – OLS (ordinary least square)

    普通最小二乘法回归 – OLS (ordinary least square)前言这篇博客用来记录初学普通最小二乘回归遇到的相关知识点和解决问题的过程。开发环境:Python2.7IDLE普通最小二乘法回归回归-已有数据数据集:Cal_housing.csv简介:从1990年至今,美国加州所有街区人口普查的信息,关于9组变量,共20640个观测值。VariablesBolstols…

    2022年10月21日
    6
  • 首次备案图文引导

    首次备案图文引导

    2021年9月23日
    175
  • cifar10数据集的读取Python/Tensorflow

    cifar10数据集的读取Python/Tensorflow在使用tensorflow等框架进行神经网络的构建时,数据集的读取操作至关重要,本文参考别人代码,记录了对cifar10数据集读取的理解

    2022年6月22日
    31
  • springaop的原理_javaaop原理

    springaop的原理_javaaop原理目录Spring核心知识SpringAOP原理AOP编程技术什么是AOP编程AOP底层实现原理AOP编程使用Spring核心知识Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由RodJohnson在其著作ExpertOne-On-OneJ2EEDevelopmentandDesign中阐述的部分理念和原型…

    2022年8月11日
    6
  • SecureCRTPortable连不上64位的CentOS6.5

    SecureCRTPortable连不上64位的CentOS6.5最近在VMware上装64位的CentOS6.5,发现ifconfig之后没有eth0,刚开始以为virbr0的inetaddr的ip就网卡的ip,其实这是为连接其上的其他虚拟网卡提供DHCP服务,eth0的ip才是网卡的ip如下图直接用ifconfig命令是没有eth0的:要看到eth0里的ip,用dhclienteth0命令自动获取一下ip,接着用ifconfig|more或者if…

    2022年5月29日
    36
  • stringstream 的用法介绍[通俗易懂]

    stringstream 的用法介绍[通俗易懂]stringstream主要有两个作用:简化类型转换和一次性读入数据: 一、使用stringstream对象简化类型转换C++标准库中的提供了比ANSIC的更高级的一些功能,即单纯性、类型安全和可扩展性。在本文中,我将展示怎样使用这些库来实现安全和自动的类型转换。为什么要学习如果你已习惯了风格的转换,也许你首先会问:为什么要花额外的精力来学习基于的类型转换呢?也许对下面一

    2022年5月6日
    58

发表回复

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

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