初始化2
This commit is contained in:
@@ -1,222 +0,0 @@
|
||||
-- =============================================
|
||||
-- Cloudreve-like 文件管理系统 - 数据库初始化脚本
|
||||
-- 包含: 文件管理 + RBAC权限 + SSO单点登录
|
||||
-- =============================================
|
||||
|
||||
CREATE DATABASE IF NOT EXISTS seeyon_fs DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
USE seeyon_fs;
|
||||
|
||||
-- ========== 用户与权限 ==========
|
||||
|
||||
-- 用户表
|
||||
CREATE TABLE IF NOT EXISTS fs_user (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
|
||||
username VARCHAR(64) UNIQUE NOT NULL COMMENT '用户名',
|
||||
password VARCHAR(256) NOT NULL COMMENT '密码(bcrypt), SSO用户为_SSO_NO_PASSWORD_',
|
||||
email VARCHAR(128) COMMENT '邮箱',
|
||||
nickname VARCHAR(64) COMMENT '昵称',
|
||||
avatar VARCHAR(512) COMMENT '头像URL',
|
||||
role VARCHAR(32) DEFAULT 'user' COMMENT '旧版角色字段(兼容)',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态: 1=启用 0=禁用',
|
||||
storage_quota BIGINT DEFAULT 10737418240 COMMENT '存储配额(字节), 默认10GB',
|
||||
used_storage BIGINT DEFAULT 0 COMMENT '已用存储(字节)',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
|
||||
|
||||
-- 角色表 (RBAC)
|
||||
CREATE TABLE IF NOT EXISTS fs_role (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '角色ID',
|
||||
name VARCHAR(64) UNIQUE NOT NULL COMMENT '角色标识: admin/editor/viewer',
|
||||
display_name VARCHAR(64) NOT NULL COMMENT '显示名称',
|
||||
description VARCHAR(256) COMMENT '角色描述',
|
||||
is_system TINYINT DEFAULT 0 COMMENT '是否系统内置: 1=是(不可删除) 0=否',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态: 1=启用 0=禁用',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';
|
||||
|
||||
-- 权限表 (RBAC)
|
||||
CREATE TABLE IF NOT EXISTS fs_permission (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '权限ID',
|
||||
code VARCHAR(64) UNIQUE NOT NULL COMMENT '权限标识: file:upload, user:manage',
|
||||
name VARCHAR(64) NOT NULL COMMENT '显示名称',
|
||||
resource VARCHAR(32) NOT NULL COMMENT '资源类型: file/folder/share/user/system',
|
||||
action VARCHAR(32) NOT NULL COMMENT '操作类型: create/read/update/delete/manage',
|
||||
description VARCHAR(256) COMMENT '权限描述'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限表';
|
||||
|
||||
-- 角色-权限关联表
|
||||
CREATE TABLE IF NOT EXISTS fs_role_permission (
|
||||
role_id BIGINT NOT NULL COMMENT '角色ID',
|
||||
permission_id BIGINT NOT NULL COMMENT '权限ID',
|
||||
PRIMARY KEY (role_id, permission_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色权限关联表';
|
||||
|
||||
-- 用户-角色关联表
|
||||
CREATE TABLE IF NOT EXISTS fs_user_role (
|
||||
user_id BIGINT NOT NULL COMMENT '用户ID',
|
||||
role_id BIGINT NOT NULL COMMENT '角色ID',
|
||||
PRIMARY KEY (user_id, role_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户角色关联表';
|
||||
|
||||
-- ========== SSO 单点登录 ==========
|
||||
|
||||
-- SSO提供商配置表
|
||||
CREATE TABLE IF NOT EXISTS fs_sso_provider (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '提供商ID',
|
||||
name VARCHAR(64) NOT NULL COMMENT '提供商标识',
|
||||
type VARCHAR(32) NOT NULL COMMENT '协议类型: oauth2/oidc/cas/ldap',
|
||||
display_name VARCHAR(64) NOT NULL COMMENT '登录页显示名称',
|
||||
icon VARCHAR(512) COMMENT '图标URL',
|
||||
config JSON COMMENT '协议配置(ClientID/Secret/URL等)',
|
||||
auto_create TINYINT DEFAULT 1 COMMENT '自动创建用户: 1=是 0=否',
|
||||
default_role VARCHAR(32) DEFAULT 'viewer' COMMENT '自动创建时的默认角色',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态: 1=启用 0=禁用',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SSO提供商配置表';
|
||||
|
||||
-- SSO会话记录表
|
||||
CREATE TABLE IF NOT EXISTS fs_sso_session (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '会话ID',
|
||||
user_id BIGINT NOT NULL COMMENT '关联的本地用户ID',
|
||||
provider_id BIGINT NOT NULL COMMENT 'SSO提供商ID',
|
||||
external_id VARCHAR(256) NOT NULL COMMENT '外部系统用户ID',
|
||||
access_token VARCHAR(1024) COMMENT 'SSO Access Token',
|
||||
refresh_token VARCHAR(1024) COMMENT 'SSO Refresh Token',
|
||||
expires_at DATETIME COMMENT 'Token过期时间',
|
||||
last_login_at DATETIME COMMENT '最近登录时间',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_user (user_id),
|
||||
INDEX idx_provider_external (provider_id, external_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SSO会话记录表';
|
||||
|
||||
-- ========== 文件管理 ==========
|
||||
|
||||
-- 文件夹表
|
||||
CREATE TABLE IF NOT EXISTS fs_folder (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '文件夹ID',
|
||||
name VARCHAR(256) NOT NULL COMMENT '文件夹名称',
|
||||
parent_id BIGINT DEFAULT 0 COMMENT '父文件夹ID, 0=根目录',
|
||||
owner_id BIGINT NOT NULL COMMENT '所属用户ID',
|
||||
path VARCHAR(1024) NOT NULL COMMENT '物化路径, 如 /0/1/5/',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态: 1=正常 0=回收站',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
INDEX idx_parent (parent_id),
|
||||
INDEX idx_owner (owner_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件夹表';
|
||||
|
||||
-- 文件表
|
||||
CREATE TABLE IF NOT EXISTS fs_file (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '文件ID',
|
||||
name VARCHAR(256) NOT NULL COMMENT '文件名',
|
||||
extension VARCHAR(32) COMMENT '文件扩展名',
|
||||
folder_id BIGINT NOT NULL COMMENT '所属文件夹ID',
|
||||
owner_id BIGINT NOT NULL COMMENT '所属用户ID',
|
||||
size BIGINT DEFAULT 0 COMMENT '文件大小(字节)',
|
||||
md5 VARCHAR(32) COMMENT '文件MD5指纹',
|
||||
storage_key VARCHAR(512) NOT NULL COMMENT '存储引擎中的唯一标识',
|
||||
mime_type VARCHAR(128) COMMENT 'MIME类型',
|
||||
is_favorite TINYINT DEFAULT 0 COMMENT '是否收藏: 1=是 0=否',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态: 1=正常 0=回收站',
|
||||
download_count INT DEFAULT 0 COMMENT '下载次数',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
INDEX idx_folder (folder_id),
|
||||
INDEX idx_owner (owner_id),
|
||||
INDEX idx_md5 (md5)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件表';
|
||||
|
||||
-- 分享表
|
||||
CREATE TABLE IF NOT EXISTS fs_share (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '分享ID',
|
||||
file_id BIGINT NOT NULL COMMENT '文件ID',
|
||||
owner_id BIGINT NOT NULL COMMENT '分享者用户ID',
|
||||
share_code VARCHAR(32) UNIQUE NOT NULL COMMENT '分享码',
|
||||
password VARCHAR(64) COMMENT '提取密码',
|
||||
expire_at DATETIME COMMENT '过期时间, NULL=永不过期',
|
||||
max_download INT DEFAULT 0 COMMENT '最大下载次数, 0=不限制',
|
||||
download_count INT DEFAULT 0 COMMENT '已下载次数',
|
||||
permissions VARCHAR(32) DEFAULT 'preview,download' COMMENT '权限',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态: 1=有效 0=已取消',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='分享表';
|
||||
|
||||
-- 存储策略表
|
||||
CREATE TABLE IF NOT EXISTS fs_storage_policy (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '策略ID',
|
||||
name VARCHAR(64) NOT NULL COMMENT '策略名称',
|
||||
type VARCHAR(32) NOT NULL COMMENT '类型: local/minio/s3/oss',
|
||||
config JSON COMMENT '配置JSON',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态: 1=启用 0=禁用',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='存储策略表';
|
||||
|
||||
-- 业务文件关联表 (兼容OA系统)
|
||||
CREATE TABLE IF NOT EXISTS fs_file_association (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '关联ID',
|
||||
biz_id VARCHAR(128) NOT NULL COMMENT '业务单据ID',
|
||||
biz_type VARCHAR(64) NOT NULL COMMENT '业务类型',
|
||||
file_id BIGINT NOT NULL COMMENT '文件ID',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
INDEX idx_biz (biz_id, biz_type)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='业务文件关联表';
|
||||
|
||||
-- ========== 初始数据 ==========
|
||||
|
||||
-- 插入默认管理员 (密码: admin123)
|
||||
INSERT INTO fs_user (username, password, nickname, role, storage_quota)
|
||||
VALUES ('admin', '$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy', '管理员', 'admin', 107374182400)
|
||||
ON DUPLICATE KEY UPDATE id=id;
|
||||
|
||||
-- 插入默认本地存储策略
|
||||
INSERT INTO fs_storage_policy (name, type, config)
|
||||
VALUES ('本地存储', 'local', '{"base_path":"./data/storage"}')
|
||||
ON DUPLICATE KEY UPDATE id=id;
|
||||
|
||||
-- 插入默认权限
|
||||
INSERT INTO fs_permission (code, name, resource, action) VALUES
|
||||
('file:create', '创建文件/文件夹', 'file', 'create'),
|
||||
('file:read', '查看文件', 'file', 'read'),
|
||||
('file:update', '修改文件', 'file', 'update'),
|
||||
('file:delete', '删除文件', 'file', 'delete'),
|
||||
('file:upload', '上传文件', 'file', 'upload'),
|
||||
('share:create', '创建分享', 'share', 'create'),
|
||||
('share:manage', '管理分享', 'share', 'manage'),
|
||||
('user:manage', '用户管理', 'user', 'manage'),
|
||||
('role:manage', '角色管理', 'role', 'manage'),
|
||||
('sso:manage', 'SSO管理', 'sso', 'manage'),
|
||||
('system:manage', '系统管理', 'system', 'manage')
|
||||
ON DUPLICATE KEY UPDATE id=id;
|
||||
|
||||
-- 插入默认角色
|
||||
INSERT INTO fs_role (name, display_name, description, is_system) VALUES
|
||||
('admin', '管理员', '系统管理员, 拥有所有权限', 1),
|
||||
('editor', '编辑者', '可以上传、修改、删除文件', 1),
|
||||
('viewer', '查看者', '只能查看和下载文件', 1)
|
||||
ON DUPLICATE KEY UPDATE id=id;
|
||||
|
||||
-- 管理员角色分配所有权限
|
||||
INSERT INTO fs_role_permission (role_id, permission_id)
|
||||
SELECT r.id, p.id FROM fs_role r, fs_permission p WHERE r.name = 'admin'
|
||||
ON DUPLICATE KEY UPDATE role_id=role_id;
|
||||
|
||||
-- 编辑者角色分配文件和分享权限
|
||||
INSERT INTO fs_role_permission (role_id, permission_id)
|
||||
SELECT r.id, p.id FROM fs_role r, fs_permission p
|
||||
WHERE r.name = 'editor' AND p.code IN ('file:create', 'file:read', 'file:update', 'file:delete', 'file:upload', 'share:create')
|
||||
ON DUPLICATE KEY UPDATE role_id=role_id;
|
||||
|
||||
-- 查看者角色分配只读权限
|
||||
INSERT INTO fs_role_permission (role_id, permission_id)
|
||||
SELECT r.id, p.id FROM fs_role r, fs_permission p
|
||||
WHERE r.name = 'viewer' AND p.code = 'file:read'
|
||||
ON DUPLICATE KEY UPDATE role_id=role_id;
|
||||
|
||||
-- 管理员用户分配admin角色
|
||||
INSERT INTO fs_user_role (user_id, role_id)
|
||||
SELECT u.id, r.id FROM fs_user u, fs_role r WHERE u.username = 'admin' AND r.name = 'admin'
|
||||
ON DUPLICATE KEY UPDATE user_id=user_id;
|
||||
Reference in New Issue
Block a user