数据库表结构
RABC
RABC(基于角色的访问控制,Role-Based Access Control)
用户表 (users)
DROP TABLE IF EXISTS users;
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID,自增主键',
username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名,唯一',
password VARCHAR(512) NOT NULL COMMENT '用户密码(加密存储)',
enabled TINYINT DEFAULT 1 COMMENT '是否启用:0-禁用,1-启用',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) COMMENT='用户表' AUTO_INCREMENT=10001;
角色表(roles)
CREATE TABLE roles (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL, -- 角色名称
description VARCHAR(255) -- 角色描述
);
用户角色关系表 (user_roles)
CREATE TABLE user_roles (
user_id BIGINT,
role_id BIGINT,
PRIMARY KEY (user_id, role_id),
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (role_id) REFERENCES roles(id)
);
菜单表 menus
CREATE TABLE menus (
id BIGINT AUTO_INCREMENT PRIMARY KEY, -- 菜单ID
name VARCHAR(255) NOT NULL, -- 菜单名称
url VARCHAR(255), -- 菜单的 URL(可为空)
parent_id BIGINT DEFAULT NULL, -- 父菜单ID(支持多级菜单)
component VARCHAR(255), -- 组件名称,用于动态加载
order_index INT DEFAULT 0, -- 菜单排序字段
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
角色菜单关系表 role_menus
CREATE TABLE role_menus (
role_id BIGINT,
menu_id BIGINT,
PRIMARY KEY (role_id, menu_id),
FOREIGN KEY (role_id) REFERENCES roles(id),
FOREIGN KEY (menu_id) REFERENCES menus(id)
);
权限表 permissions
CREATE TABLE permissions (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL, -- 权限名称(如 "create:post")
description VARCHAR(255) -- 权限描述
);
role_permissions 关系表
CREATE TABLE role_permissions (
role_id BIGINT,
permission_id BIGINT,
PRIMARY KEY (role_id, permission_id),
FOREIGN KEY (role_id) REFERENCES roles(id),
FOREIGN KEY (permission_id) REFERENCES permissions(id)
);
数据插入
插入用户数据
INSERT INTO users (id, username, password, enabled) VALUES
(10001, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1), -- 123456 (MD5 示例,加密存储)
(10002, 'user1', 'e10adc3949ba59abbe56e057f20f883e', 1),
(10003, 'user2', 'e10adc3949ba59abbe56e057f20f883e', 1);
插入角色数据
INSERT INTO roles (id, name, description) VALUES
(1, 'ADMIN', '系统管理员'),
(2, 'USER', '普通用户'),
(3, 'GUEST', '游客');
绑定用户与角色
INSERT INTO user_roles (user_id, role_id) VALUES
(10001, 1), -- admin 绑定管理员角色
(10002, 2), -- user1 绑定普通用户角色
(10003, 3); -- user2 绑定游客角色
插入权限数据
INSERT INTO permissions (id, name, description) VALUES
(1, 'user:read', '读取用户信息'),
(2, 'user:write', '修改用户信息'),
(3, 'menu:read', '查看菜单'),
(4, 'menu:write', '管理菜单');
绑定角色与权限
INSERT INTO role_permissions (role_id, permission_id) VALUES
(1, 1), -- 管理员可以读取用户信息
(1, 2), -- 管理员可以修改用户信息
(1, 3), -- 管理员可以查看菜单
(1, 4), -- 管理员可以管理菜单
(2, 1), -- 普通用户可以读取用户信息
(3, 3); -- 游客仅能查看菜单
插入菜单数据
INSERT INTO menus (id, name, url, parent_id, component, order_index) VALUES
(1, '系统管理', NULL, NULL, 'SystemManage', 1),
(2, '用户管理', '/users', 1, 'UserManage', 1),
(3, '角色管理', '/roles', 1, 'RoleManage', 2),
(4, '权限管理', '/permissions', 1, 'PermissionManage', 3);
绑定角色与菜单
INSERT INTO role_menus (role_id, menu_id) VALUES
(1, 1), -- 管理员可以访问系统管理菜单
(1, 2), -- 管理员可以访问用户管理
(1, 3), -- 管理员可以访问角色管理
(1, 4), -- 管理员可以访问权限管理
(2, 2), -- 普通用户可以访问用户管理
(3, 4); -- 游客仅能访问权限管理