Shiro权限 表设计
表设计
权限管理需要的基本表有5个 如下:
sys_users
用户表sys_roles
角色表sys_permissions
权限表(或资源表)sys_users_roles
用户-角色关联表sys_roles_permissions
角色-权限关联表(或角色-资源关联表)
用户表:
角色表:
权限表:
用户角色表:
角色权限表:
最后上完整代码:
##用户表
CREATE TABLE sys_users(
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '编号',
username VARCHAR(100) COMMENT '用户名',
phone VARCHAR(20) COMMENT '手机号',
PASSWORD VARCHAR(100) COMMENT '密码',
salt VARCHAR(100) COMMENT '盐值',
icon VARCHAR(400) COMMENT '头像',
address VARCHAR(120) COMMENT '住址',
locaed VARCHAR(8) DEFAULT '开启' COMMENT '状态'
)ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='用户表';
##角色表
CREATE TABLE sys_roles(
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '角色编号',
rolename VARCHAR(100) COMMENT '角色名称',
description VARCHAR(100) COMMENT '角色描述',
available VARCHAR(8) DEFAULT '开启' COMMENT '状态'
)ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='角色表';
##权限表
CREATE TABLE sys_permissions(
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '编号',
NAME VARCHAR(100) COMMENT '权限名称',
url VARCHAR(100) COMMENT '权限路径',
TYPE VARCHAR(100) COMMENT '权限类型',
pid INT COMMENT '父节点',
available VARCHAR(8) DEFAULT '开启' COMMENT '状态'
)ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='权限表'
##用户角色关系表
CREATE TABLE sys_user_role(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT,
role_id BIGINT
)ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='用户角色表'
##角色权限关系表
CREATE TABLE sys_role_permission(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
role_id BIGINT,
permission_id BIGINT
)ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='角色权限表'
插入数据语句:
##用户表
INSERT INTO sys_users(username,phone,PASSWORD,salt,icon,address,locaed)
VALUES
('admin','15271700712','47401c60d14382166631feae98511a18','lq','my.jpg','湖北省武汉市','开启'),
('user','13085238807','47401c60d14382166631feae98511a18','lq','my.jpg','湖南省长沙市','开启'),
('guest','1784545751','fe00294a99ced9aa2477fcdb231cb316','lq','my.jpg','广东省深圳市','关闭')
##角色表
INSERT INTO sys_roles(rolename,description,available)
VALUES
('普通用户','拥有查询,添加权限','开启'),
('超级管理','拥有查询,添加,删除,修改权限','开启'),
('匿名游客','拥有观赏权限','开启')
##权限表
INSERT INTO sys_permissions(NAME,url,TYPE,pid,available)
VALUES
('系统设置','null','menu',0,'开启'),
('销售管理','null','menu',0,'开启'),
('用户管理','user/list','menu',1,'开启'),
('角色管理','role/list','menu',1,'开启'),
('角色添加','role/add','button','4','开启'),
('角色删除','role/delete','button','4','开启'),
('角色修改','role/update','button','4','开启'),
('角色查询','role/find','button','4','开启'),
('用户添加','user/add','button','3','开启'),
('用户删除','user/delete','button','3','开启'),
('用户修改','user/update','button','3','开启'),
('用户查询','user/find','button','3','开启')
##用户角色表关系表
INSERT INTO sys_user_role(user_id,role_id)VALUES(1,1),(1,2),(1,3),(2,1),(2,3),(3,3)
##角色权限表关系表
INSERT INTO sys_role_permission(role_id,permission_id)VALUES(1,1),(1,8),(1,12),(2,1),(2,2),(2,3),(2,4),(2,12),(3,0)
最后感言
如果使用外键关联,在对表进行数据操作时就考虑另一张关联的表,相当于两张表就绑在一起了,操作这张表就必须考虑另一张关联表。我们开发时候不想立即就修改或更新关联表的数据,可能一会再去更新另一张关联表的数据,那么就产生了这种方式:通过单独建立一张关联来实现两张表的数据关联。so,在设计表时尽量减少表与表直接的外键约束,避免麻烦,表关联关系清晰