在Java权限设计中,通常基于RBAC(基于角色的访问控制)模型,核心表一般包括以下5张基础表,若涉及组织架构或复杂权限层级,可能扩展更多表。以下是常见设计:
5张基础表
1. 用户表(sys_user
)
存储用户基本信息,如账号、密码、状态等。
CREATE TABLE sys_user (
id BIGINT PRIMARY KEY COMMENT '用户ID',
username VARCHAR(50) NOT NULL COMMENT '登录名',
password VARCHAR(100) NOT NULL COMMENT '密码',
email VARCHAR(100) COMMENT '邮箱',
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态(0-禁用,1-正常)',
create_time DATETIME NOT NULL COMMENT '创建时间'
);
2. 角色表(sys_role
)
定义系统中的角色(如管理员、普通用户)。
CREATE TABLE sys_role (
id BIGINT PRIMARY KEY COMMENT '角色ID',
role_name VARCHAR(50) NOT NULL COMMENT '角色名称',
role_key VARCHAR(50) NOT NULL COMMENT '角色标识(如admin、user)',
description VARCHAR(255) COMMENT '角色描述'
);
3. 权限表(sys_permission
)
记录具体的权限项(如页面访问、按钮操作),可支持树形结构。
CREATE TABLE sys_permission (
id BIGINT PRIMARY KEY COMMENT '权限ID',
name VARCHAR(50) NOT NULL COMMENT '权限名称',
permission_key VARCHAR(100) NOT NULL COMMENT '权限标识(如user:add)',
type TINYINT NOT NULL COMMENT '类型(0-菜单,1-按钮,2-接口)',
parent_id BIGINT DEFAULT 0 COMMENT '父权限ID(用于树形结构)',
path VARCHAR(200) COMMENT '资源路径(如URL)'
);
4. 用户-角色关联表(sys_user_role
)
维护用户与角色的多对多关系。
CREATE TABLE sys_user_role (
user_id BIGINT NOT NULL COMMENT '用户ID',
role_id BIGINT NOT NULL COMMENT '角色ID',
PRIMARY KEY (user_id, role_id)
);
5. 角色-权限关联表(sys_role_permission
)
维护角色与权限的多对多关系。
CREATE TABLE sys_role_permission (
role_id BIGINT NOT NULL COMMENT '角色ID',
permission_id BIGINT NOT NULL COMMENT '权限ID',
PRIMARY KEY (role_id, permission_id)
);
扩展表(按需添加)
6. 部门/组织表(sys_dept
)
若需按部门控制权限,添加部门信息。
CREATE TABLE sys_dept (
id BIGINT PRIMARY KEY COMMENT '部门ID',
dept_name VARCHAR(50) NOT NULL COMMENT '部门名称',
parent_id BIGINT DEFAULT 0 COMMENT '父部门ID',
leader_id BIGINT COMMENT '部门负责人ID'
);
7. 用户-部门关联表(sys_user_dept
)
用户与部门的归属关系。
CREATE TABLE sys_user_dept (
user_id BIGINT NOT NULL COMMENT '用户ID',
dept_id BIGINT NOT NULL COMMENT '部门ID',
PRIMARY KEY (user_id, dept_id)
);
8. 数据权限表(sys_data_scope
)
控制角色对数据的可见范围(如本部门、自定义等)。
CREATE TABLE sys_data_scope (
role_id BIGINT NOT NULL COMMENT '角色ID',
dept_ids TEXT COMMENT '可见部门ID集合',
scope_type TINYINT NOT NULL COMMENT '数据范围类型(1-全部,2-本部门,3-自定义)'
);
9、菜单表(sys_menu
)
如果系统有界面菜单,并且需要控制菜单的访问权限。
10、资源表(sys_resource)
如果权限管理涉及到具体的资源(如文件、数据库记录等)。
核心流程
-
用户登录:验证用户身份(
sys_user
)。 -
查询角色:通过
sys_user_role
获取用户角色。 -
获取权限:通过
sys_role_permission
关联角色对应的权限。 -
鉴权:检查用户是否拥有访问某资源的权限(如
permission_key
)。
进阶设计
1、权限层级:通过parent_id
字段实现菜单/权限的树形结构。
2、细分权限类型:如菜单(页面)、按钮、API接口等(type
字段)。
3、数据权限:通过部门或自定义规则限制数据访问范围。
根据业务复杂度,可灵活调整表结构和字段设计。