RBAC SQL table create
the core is: User ↔ Role ↔ Permission 表结构总览 sys_user 用户表 sys_role 角色表 sys_permission 权限表(菜单/按钮/接口) sys_user_role 用户-角色关联表(多对多) sys_role_permission 角色-权限关联表(多对多) 1. sys_user CREATE TABLE sys_user ( id bigint NOT NULL COMMENT '用户ID', username varchar(50) NOT NULL COMMENT '登录账号', password varchar(100) NOT NULL COMMENT '密码(加密存储,如BCrypt)', nickname varchar(50) DEFAULT NULL COMMENT '昵称', avatar varchar(255) DEFAULT NULL COMMENT '头像', phone varchar(20) DEFAULT NULL COMMENT '手机号', email varchar(100) DEFAULT NULL COMMENT '邮箱', gender tinyint DEFAULT NULL COMMENT '性别(0:未知,1:男,2:女)', status tinyint DEFAULT '1' COMMENT '状态(1:正常,0:禁用)', last_login_time datetime DEFAULT NULL COMMENT '最后登录时间', last_login_ip varchar(50) DEFAULT NULL COMMENT '最后登录IP', create_at datetime DEFAULT NULL COMMENT '创建时间', update_at datetime DEFAULT NULL COMMENT '更新时间', deleted tinyint DEFAULT '0' COMMENT '逻辑删除(0:未删除,1:已删除)', PRIMARY KEY (id), UNIQUE KEY uk_username (username), KEY idx_phone (phone) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表'; 2. sys_role CREATE TABLE sys_role ( id bigint NOT NULL COMMENT '角色ID', role_name varchar(50) NOT NULL COMMENT '角色名称,如"管理员"', role_code varchar(50) NOT NULL COMMENT '角色编码,如ROLE_ADMIN,代码里用来判断权限', description varchar(255) DEFAULT NULL COMMENT '角色描述', sort int DEFAULT NULL COMMENT '排序', status tinyint DEFAULT '1' COMMENT '状态(1:启用,0:禁用)', create_at datetime DEFAULT NULL COMMENT '创建时间', update_at datetime DEFAULT NULL COMMENT '更新时间', deleted tinyint DEFAULT '0' COMMENT '逻辑删除', PRIMARY KEY (id), UNIQUE KEY uk_role_code (role_code) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='角色表'; 3. sys_permission CREATE TABLE sys_permission ( id bigint NOT NULL COMMENT '权限ID', parent_id bigint DEFAULT '0' COMMENT '父级ID,顶级为0', name varchar(50) NOT NULL COMMENT '权限名称,如"食品管理"', type tinyint NOT NULL COMMENT '类型(1:目录,2:菜单,3:按钮/操作,4:接口)', permission_code varchar(100) DEFAULT NULL COMMENT '权限标识,如 food:add,用于代码里@PreAuthorize判断', path varchar(255) DEFAULT NULL COMMENT '前端路由路径', component varchar(255) DEFAULT NULL COMMENT '前端组件路径', icon varchar(100) DEFAULT NULL COMMENT '图标', api_path varchar(255) DEFAULT NULL COMMENT '接口路径,如 /food/add(type=4时使用)', api_method varchar(10) DEFAULT NULL COMMENT '请求方式 GET/POST/PUT/DELETE', sort int DEFAULT NULL COMMENT '排序', status tinyint DEFAULT '1' COMMENT '状态(1:启用,0:禁用)', create_at datetime DEFAULT NULL COMMENT '创建时间', update_at datetime DEFAULT NULL COMMENT '更新时间', deleted tinyint DEFAULT '0' COMMENT '逻辑删除', PRIMARY KEY (id), KEY idx_parent_id (parent_id), KEY idx_permission_code (permission_code) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='权限表(菜单/按钮/接口)'; 4. sys_user_role CREATE TABLE sys_user_role ( id bigint NOT NULL, user_id bigint NOT NULL COMMENT '用户ID', role_id bigint NOT NULL COMMENT '角色ID', create_at datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (id), UNIQUE KEY uk_user_role (user_id,role_id), KEY idx_role_id (role_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户-角色关联表'; 5. sys_role_permission CREATE TABLE sys_role_permission ( id bigint NOT NULL, role_id bigint NOT NULL COMMENT '角色ID', permission_id bigint NOT NULL COMMENT '权限ID', create_at datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (id), UNIQUE KEY uk_role_permission (role_id,permission_id), KEY idx_permission_id (permission_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='角色-权限关联表'; 关系链路:用户 → 用户角色关联表 → 角色 → 角色权限关联表 → 权限 一个用户查权限的完整链路: SELECT DISTINCT p.permission_code FROM sys_user u JOIN sys_user_role ur ON ur.user_id = u.id JOIN sys_role r ON r.id = ur.role_id AND r.status = 1 JOIN sys_role_permission rp ON rp.role_id = r.id JOIN sys_permission p ON p.id = rp.permission_id AND p.status = 1 WHERE u.id = ? AND u.status = 1; Top comments (0)
Comments
No comments yet. Start the discussion.