权限设计

客户端想访问资源接口时,都需要经过鉴权,才能正常访问,没有经过鉴权的请求, 都会被拒绝。采用 SpringSecurity OAuth2.0,对客户端进行授权及鉴权,步骤如下:
- 客户端携带账号、密码,请求授权服务,授权服务验证账号、密码是否正确, 如果正确返回 token 令牌,否则告知客户端账号或密码不正确等。
- 客户端携带 token 令牌请求资源接口,网关会请求鉴权服务,判断用户是否有权 限访问该资源,如果有权限,则返回资源的响应数据,否则告知客户端无权访问该资源。
菜单权限
系统分为超级管理员和普通管理员,超级管理员拥有所有功能权限及数据权限,主要职责是创建普通管理员账号,并给普通管理员分配权限。在系统里,拥有用户管理、 角色管理的账号,我们就可以理解成普通管理员,因为可以新建用户及分配权限。管理员新建用户、角色、部门时,会有一定的约束,保证不会有越权操作。

数据权限
数据权限分为全部数据权限、本部门及子部门数据权限、本部门数据权限、本人数据权限四种,根据登录的用户角色判断其权限范围,进行数据的过滤,没相应的数据权限,则不能查询、操作相应的数据。
数据权限实现方式如下:
- 用户登录后,获取其所属角色中权限最高的级别及所属部门。
- 根据部门 ID 列表进行数据过滤,数据过滤表,都需要有部门 ID。

数据库设计
关系图

表清单
序号 | 数据表 | 名称 |
---|
1 | sys_dept | 部门表 |
2 | sys_menu | 菜单权限表 |
3 | sys_role | 角色信息表 |
4 | sys_role_dept | 角色和部门关联表 |
5 | sys_role_menu | 角色和菜单关联表 |
6 | sys_user | 用户信息表 |
7 | sys_user_role | 用户和角色关联表 |
表字段明细
1.1.1 sys_dept [组织架构表]
# | 字段 | 名称 | 数据类型 | 主键 | 非空 | 默认值 | 备注说明 |
---|
1 | dept_id | 部门id | BIGINT(20) | √ | √ | | |
2 | parent_id | 父部门id | BIGINT(20) | | | 0 | |
3 | ancestors | 祖级列表 | VARCHAR(50) | | | | |
4 | dept_name | 部门名称 | VARCHAR(30) | | | | |
5 | order_num | 显示顺序 | INT(11) | | | 0 | |
6 | status | 部门状态 | CHAR(1) | | | '0' | 0正常 1停用 |
7 | del_flag | 删除标志 | CHAR(1) | | | '0' | 0代表存在 2代表删除 |
8 | create_by | 创建者 | VARCHAR(64) | | | | |
9 | create_time | 创建时间 | DATETIME | | | | |
10 | update_by | 更新者 | VARCHAR(64) | | | | |
11 | update_time | 更新时间 | DATETIME | | | | |
1.1.2 sys_menu [菜单权限表]
# | 字段 | 名称 | 数据类型 | 主键 | 非空 | 默认值 | 备注说明 |
---|
1 | menu_id | 菜单ID | BIGINT(20) | √ | √ | | |
2 | menu_name | 菜单名称 | VARCHAR(50) | | √ | | |
3 | parent_id | 父菜单ID | BIGINT(20) | | | 0 | |
4 | order_num | 显示顺序 | INT(11) | | | 0 | |
5 | path | 路由地址 | VARCHAR(200) | | | | |
6 | component | 组件路径 | VARCHAR(255) | | | | |
7 | menu_type | 菜单类型 | CHAR(1) | | | | M目录 C菜单 F按钮 |
8 | visible | 菜单状态 | CHAR(1) | | | '0' | 0显示 1隐藏 |
9 | status | 菜单状态 | CHAR(1) | | | '0' | 0正常 1停用 |
10 | perms | 权限标识 | VARCHAR(100) | | | | |
11 | icon | 菜单图标 | VARCHAR(100) | | | '#' | |
12 | create_by | 创建者 | VARCHAR(64) | | | | |
13 | create_time | 创建时间 | DATETIME | | | | |
14 | update_by | 更新者 | VARCHAR(64) | | | | |
15 | update_time | 更新时间 | DATETIME | | | | |
16 | remark | 备注 | VARCHAR(500) | | | | |
1.1.3 sys_role [角色信息表]
# | 字段 | 名称 | 数据类型 | 主键 | 非空 | 默认值 | 备注说明 |
---|
1 | role_id | 角色ID | BIGINT(20) | √ | √ | | |
2 | role_name | 角色名称 | VARCHAR(30) | | √ | | |
3 | role_key | 角色权限字符串 | VARCHAR(100) | | √ | | |
4 | role_sort | 显示顺序 | INT(11) | | √ | | |
5 | data_scope | 数据范围 | CHAR(1) | | | '1' | 1:全部数据权限 2:本部门及以下数据权限 3:本部门数据权限 4:本人权限 |
6 | status | 角色状态 | CHAR(1) | | √ | | 0正常 1停用 |
7 | del_flag | 删除标志 | CHAR(1) | | | '0' | 0代表存在 2代表删除 |
8 | create_by | 创建者 | VARCHAR(64) | | | | |
9 | create_time | 创建时间 | DATETIME | | | | |
10 | update_by | 更新者 | VARCHAR(64) | | | | |
11 | update_time | 更新时间 | DATETIME | | | | |
12 | remark | 备注 | VARCHAR(500) | | | | |
1.1.4 sys_role_dept [角色和部门关联表]
# | 字段 | 名称 | 数据类型 | 主键 | 非空 | 默认值 | 备注说明 |
---|
1 | role_id | 角色ID | BIGINT(20) | √ | √ | | |
2 | dept_id | 部门ID | BIGINT(20) | √ | √ | | |
1.1.5 sys_role_menu [角色和菜单关联表]
# | 字段 | 名称 | 数据类型 | 主键 | 非空 | 默认值 | 备注说明 |
---|
1 | role_id | 角色ID | BIGINT(20) | √ | √ | | |
2 | menu_id | 菜单ID | BIGINT(20) | √ | √ | | |
1.1.6 sys_user [用户信息表]
# | 字段 | 名称 | 数据类型 | 主键 | 非空 | 默认值 | 备注说明 |
---|
1 | user_id | 用户ID | BIGINT(20) | √ | √ | | |
2 | dept_id | 部门ID | BIGINT(20) | | | | |
3 | user_name | 用户账号 | VARCHAR(30) | | √ | | |
4 | nick_name | 用户昵称 | VARCHAR(30) | | √ | | |
5 | user_type | 用户类型 | VARCHAR(2) | | | '00' | 00 系统用户 01 B端用户 02 C端用户 |
6 | email | 用户邮箱 | VARCHAR(50) | | | | |
7 | phone_number | 手机号码 | VARCHAR(11) | | | | |
8 | sex | 用户性别 | CHAR(1) | | | '0' | 0男 1女 2未知 |
9 | avatar | 头像地址 | VARCHAR(100) | | | | |
10 | password | 密码 | VARCHAR(100) | | | | |
11 | status | 帐号状态 | CHAR(1) | | | '0' | 0正常 1停用 |
12 | del_flag | 删除标志 | CHAR(1) | | | '0' | 0代表存在 2代表删除 |
13 | login_ip | 最后登录IP | VARCHAR(128) | | | | |
14 | login_date | 最后登录时间 | DATETIME | | | | |
15 | create_by | 创建者 | VARCHAR(64) | | | | |
16 | create_time | 创建时间 | DATETIME | | | | |
17 | update_by | 更新者 | VARCHAR(64) | | | | |
18 | update_time | 更新时间 | DATETIME | | | | |
19 | remark | 备注 | VARCHAR(500) | | | | |
1.1.7 sys_user_role [用户和角色关联表]
# | 字段 | 名称 | 数据类型 | 主键 | 非空 | 默认值 | 备注说明 |
---|
1 | user_id | 用户ID | BIGINT(20) | √ | √ | | |
2 | role_id | 角色ID | BIGINT(20) | √ | √ | | |
建表SQL
DROP TABLE IF EXISTS sys_dept;
CREATE TABLE sys_dept(
dept_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '部门id' ,
parent_id BIGINT(20) DEFAULT 0 COMMENT '父部门id' ,
ancestors VARCHAR(50) COMMENT '祖级列表' ,
dept_name VARCHAR(30) COMMENT '部门名称' ,
order_num INT(11) DEFAULT 0 COMMENT '显示顺序' ,
status CHAR(1) DEFAULT '0' COMMENT '部门状态;0正常 1停用' ,
del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志;0代表存在 2代表删除' ,
create_by VARCHAR(64) COMMENT '创建者' ,
create_time DATETIME COMMENT '创建时间' ,
update_by VARCHAR(64) COMMENT '更新者' ,
update_time DATETIME COMMENT '更新时间' ,
PRIMARY KEY (dept_id)
) COMMENT = '组织架构表';
DROP TABLE IF EXISTS sys_menu;
CREATE TABLE sys_menu(
menu_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '菜单ID' ,
menu_name VARCHAR(50) NOT NULL COMMENT '菜单名称' ,
parent_id BIGINT(20) DEFAULT 0 COMMENT '父菜单ID' ,
order_num INT(11) DEFAULT 0 COMMENT '显示顺序' ,
path VARCHAR(200) COMMENT '路由地址' ,
component VARCHAR(255) COMMENT '组件路径' ,
menu_type CHAR(1) COMMENT '菜单类型;M目录 C菜单 F按钮' ,
visible CHAR(1) DEFAULT '0' COMMENT '菜单状态;0显示 1隐藏' ,
status CHAR(1) DEFAULT '0' COMMENT '菜单状态;0正常 1停用' ,
perms VARCHAR(100) COMMENT '权限标识' ,
icon VARCHAR(100) DEFAULT '#' COMMENT '菜单图标' ,
create_by VARCHAR(64) COMMENT '创建者' ,
create_time DATETIME COMMENT '创建时间' ,
update_by VARCHAR(64) COMMENT '更新者' ,
update_time DATETIME COMMENT '更新时间' ,
remark VARCHAR(500) COMMENT '备注' ,
PRIMARY KEY (menu_id)
) COMMENT = '菜单权限表';
DROP TABLE IF EXISTS sys_role;
CREATE TABLE sys_role(
role_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '角色ID' ,
role_name VARCHAR(30) NOT NULL COMMENT '角色名称' ,
role_key VARCHAR(100) NOT NULL COMMENT '角色权限字符串' ,
role_sort INT(11) NOT NULL COMMENT '显示顺序' ,
data_scope CHAR(1) DEFAULT '1' COMMENT '数据范围;1:全部数据权限 2:本部门及以下数据权限 3:本部门数据权限 4:本人权限' ,
status CHAR(1) NOT NULL COMMENT '角色状态;0正常 1停用' ,
del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志;0代表存在 2代表删除' ,
create_by VARCHAR(64) COMMENT '创建者' ,
create_time DATETIME COMMENT '创建时间' ,
update_by VARCHAR(64) COMMENT '更新者' ,
update_time DATETIME COMMENT '更新时间' ,
remark VARCHAR(500) COMMENT '备注' ,
PRIMARY KEY (role_id)
) COMMENT = '角色信息表';
DROP TABLE IF EXISTS sys_role_dept;
CREATE TABLE sys_role_dept(
role_id BIGINT(20) NOT NULL COMMENT '角色ID' ,
dept_id BIGINT(20) NOT NULL COMMENT '部门ID' ,
PRIMARY KEY (role_id,dept_id)
) COMMENT = '角色和部门关联表';
DROP TABLE IF EXISTS sys_role_menu;
CREATE TABLE sys_role_menu(
role_id BIGINT(20) NOT NULL COMMENT '角色ID' ,
menu_id BIGINT(20) NOT NULL COMMENT '菜单ID' ,
PRIMARY KEY (role_id,menu_id)
) COMMENT = '角色和菜单关联表';
DROP TABLE IF EXISTS sys_user;
CREATE TABLE sys_user(
user_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID' ,
dept_id BIGINT(20) COMMENT '部门ID' ,
user_name VARCHAR(30) NOT NULL COMMENT '用户账号' ,
nick_name VARCHAR(30) NOT NULL COMMENT '用户昵称' ,
user_type VARCHAR(2) DEFAULT '00' COMMENT '用户类型;00系统用户 01:B端用户 02:C端用户' ,
email VARCHAR(50) COMMENT '用户邮箱' ,
phone_number VARCHAR(11) COMMENT '手机号码' ,
sex CHAR(1) DEFAULT '0' COMMENT '用户性别;0男 1女 2未知' ,
avatar VARCHAR(100) COMMENT '头像地址' ,
password VARCHAR(100) COMMENT '密码' ,
status CHAR(1) DEFAULT '0' COMMENT '帐号状态;0正常 1停用' ,
del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志;0代表存在 2代表删除' ,
login_ip VARCHAR(128) COMMENT '最后登录IP' ,
login_date DATETIME COMMENT '最后登录时间' ,
create_by VARCHAR(64) COMMENT '创建者' ,
create_time DATETIME COMMENT '创建时间' ,
update_by VARCHAR(64) COMMENT '更新者' ,
update_time DATETIME COMMENT '更新时间' ,
remark VARCHAR(500) COMMENT '备注' ,
PRIMARY KEY (user_id)
) COMMENT = '用户信息表';
DROP TABLE IF EXISTS sys_user_role;
CREATE TABLE sys_user_role(
user_id BIGINT(20) NOT NULL COMMENT '用户ID' ,
role_id BIGINT(20) NOT NULL COMMENT '角色ID' ,
PRIMARY KEY (user_id,role_id)
) COMMENT = '用户和角色关联表';
评论 (0)