权限管理数据表的设计
需要五张表,分别为(此处以MySQL为例)
用户表 | t_user |
角色表 | t_role |
权限表 | t_permission |
用户角色表 | t_user_rolet |
角色权限表 | t_role_permission |
用户拥有什么角色,这个角色拥有什么权限
用户表(t_user)
CREATE TABLE `t_user` (
`uid` int(11) NOT NULL AUTO_INCREMENT,
`uname` varchar(10) NOT NULL,
`uage` tinyint(4) DEFAULT NULL,
`uphone` int(11) DEFAULT NULL,
`uaddress` varchar(20) DEFAULT NULL,
`upwd` varchar(100) DEFAULT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8;
两个用户,user5为超级管理员拥有p1,p2权限,user6为普通账号,仅拥有p2权限
角色表(t_role)
CREATE TABLE `t_role` (
`id` int(11) NOT NULL COMMENT '角色id',
`role_name` varchar(255) NOT NULL COMMENT '角色名',
`status` varchar(255) DEFAULT NULL COMMENT '角色状态',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
权限表(t_permission)
CREATE TABLE `t_permission` (
`id` int(11) NOT NULL COMMENT '权限id',
`permission` varchar(255) NOT NULL COMMENT '权限',
`description` varchar(255) DEFAULT NULL COMMENT '权限描述',
`url` varchar(255) DEFAULT NULL COMMENT 'url',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
用户角色表(t_user_rolet)
CREATE TABLE `t_user_role` (
`user_id` int(11) NOT NULL COMMENT '用户id',
`role_id` int(11) NOT NULL COMMENT '角色id'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
角色权限表(t_role_permission)
CREATE TABLE `t_role_permission` (
`role_id` int(11) NOT NULL COMMENT '角色id',
`permission_id` int(11) NOT NULL COMMENT '权限id'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
查询这个用户拥有的权限(查询用户id为5的用户的权限)
SELECT
u.uid 用户id ,
p.permission 权限,
p.description 权限描述
FROM
t_user u,
t_permission p,
t_user_role ur,
t_role_permission rp
WHERE
u.uid = ur.user_id AND
ur.role_id = rp.role_id AND
rp.permission_id = p.id AND
u.uid = 5
u.uid = ur.user_id AND 用户表的uid 要等于 用户角色表的user_id
ur.role_id = rp.role_id AND 用户角色表的role_id 要等于 角色权限表中的role_id
rp.permission_id = p.id AND 角色权限表中的permission_id 要等于 权限表的 id
因为是从四张表中查询数据,所以表之间要有个关联条件
用户表和用户角色表关联, 用户角色表和角色权限表关联,角色权限表和权限表关联
查询出uid为5的权限,有p1,p2权限
查询出user6的权限,仅有一个p2权限