表设计之权限管理

今天来讲讲数据表设计中,对于用户的权限管理表的设计.

  • 用户表和权限表,用户表中的用户可以有权限表中的多个权限(如刘德华可以有安卓浏览/安卓发帖/安卓评论等权限),是一对多的关系,而反过来权限表的安卓浏览这个权限,同样也可以适用于用户表的不同用户(如刘德华和杨幂都可以有安卓浏览的权限),因此就需要设计一张用户权限的关联表,但同时因为一张关系表进行对应,会使得过多重复数据(例刘德华拥有安卓的所有权限,而杨幂有所有平台的权限),使得查询效率降低,因此在此过程中加入角色表,用于连接用户表和权限表的中间表,因为加入这张中间表,因此需要增加用户角色关系表和角色权限关系表.
  • 权限管理需要用到五张表,其中包含三张主表(用户表,角色表,权限表)和两张关系表(用户角色关系表,角色权限关系表)
  • 创建三张主表:
    • 用户表
    • 角色表
    • 权限表
create database boot03 charset=utf8;
    use boot03;
    create table user(id int primary key auto_increment,name varchar(50));

create table role(id int primary key auto_increment, name varchar(50));

create table module(id int primary key auto_increment, name varchar(50));
  • 创建两张关系表:
    • 用户角色关系表
    • 角色权限关系表
create table u_r(uid int, rid int);

create table r_m(rid int,mid int);
  • 主表准备数据:
insert into user values(null,'刘德华'),(null,'张学友'),(null,'杨幂');

insert into role values(null,'安卓管理员'),(null,'苹果游客'),(null,'总管理员');

insert into module values(null,'安卓浏览'),(null,'安卓评论'),(null,'安卓发帖'),(null,'安卓删帖'),(null,'苹果浏览'),(null,'苹果评论'),(null,'苹果发帖'),(null,'苹果删帖')
  • 关系表中添加数据:
    • 刘德华->安卓管理员和苹果游客       张学友->苹果游客     杨幂->总管理员
 insert into u_r values(1,1),(1,2),(2,2),(3,3);

 insert into r_m values(1,1),(1,2),(1,3),(1,4),(2,5),(2,6),(3,1),(3,2),(3,3),(3,4),(3,5),(3,6),(3,7),(3,8);

关联查询练习

  1. 查询刘德华的角色
    
    select r.name
    
    from user u join u_r ur  on u.id=ur.uid
    
    join role r on r.id=ur.rid
    
    where u.name='刘德华';
  2. 查询苹果游客这个角色对应的用户是谁? 
    select u.name
    
    from user u join u_r ur  on u.id=ur.uid
    
    join role r on r.id=ur.rid
    
    where r.name='苹果游客';
  3. 查询总管理员的权限有哪些?
    select m.name
    
    from role r join r_m rm on r.id=rm.rid
    
    join module m on m.id=rm.mid
    
    where r.name='总管理员';

  4. 查询苹果浏览权限对应的角色有哪些?
    select r.name
    
    from role r join r_m rm on r.id=rm.rid
    
    join module m on m.id=rm.mid
    
    where m.name='苹果浏览';

  5. 查询刘德华的权限有哪些?
    select m.name
    
    from user u join u_r ur on u.id=ur.uid
    
    join r_m rm on ur.rid = rm.rid
    
    join module m on m.id=rm.mid
    
    where u.name='刘德华';

  6. 查询杨幂的权限有哪些?
    select m.name
    
    from user u join u_r ur on u.id=ur.uid
    
    join r_m rm on ur.rid = rm.rid
    
    join module m on m.id=rm.mid
    
    where u.name='杨幂';

  7. 查询有哪些用户拥有安卓删帖权限?
    select u.name
    
    from user u join u_r ur on u.id=ur.uid
    
    join r_m rm on ur.rid = rm.rid
    
    join module m on m.id=rm.mid
    
    where m.name='安卓删帖';

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个基本的权限管理系统需要考虑以下几个方面: 1. 用户:存储系统中的所有用户信息,包括用户名、密码、邮箱、电话等基本信息。 2. 角色:存储系统中的所有角色信息,包括角色名称、角色描述等信息。 3. 权限:存储系统中的所有权限信息,包括权限名称、权限描述、权限标识等信息。 4. 用户角色关系:存储用户和角色之间的关系信息,用于确定一个用户拥有哪些角色。 5. 角色权限关系:存储角色和权限之间的关系信息,用于确定一个角色拥有哪些权限。 下面是一个简单的数据库设计: ``` 用户(User) ------------------------ id int 用户ID username varchar 用户名 password varchar 密码 email varchar 邮箱 phone varchar 电话 status int 状态(0-禁用,1-正常) 角色(Role) ------------------------ id int 角色ID name varchar 角色名称 description varchar 角色描述 status int 状态(0-禁用,1-正常) 权限(Permission) ------------------------ id int 权限ID name varchar 权限名称 description varchar 权限描述 code varchar 权限标识 status int 状态(0-禁用,1-正常) 用户角色关系(UserRole) ------------------------ id int ID user_id int 用户ID role_id int 角色ID 角色权限关系(RolePermission) ------------------------ id int ID role_id int 角色ID permission_id int 权限ID ``` 在这个设计中,用户、角色和权限分别存储用户、角色和权限的基本信息。用户角色关系和角色权限关系则分别存储用户和角色之间的关系信息以及角色和权限之间的关系信息。这些设计是基本的,根据实际需求还可以进行扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值