日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用户、角色和权限,多表查询

發布時間:2025/3/12 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用户、角色和权限,多表查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一,各個表格

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

?

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的用户、角色和权限,多表查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。