-- ============================================================================ -- 用户体系 + 案件归属迁移脚本 -- 目标库:PostgreSQL master(application-dev.yaml 中的 spring.datasource.dynamic.datasource.master) -- 即 jdbc:postgresql://192.168.0.109:5432/zsjz-ai -- 执行方式:手工执行(项目无 Flyway / Liquibase) -- 幂等性:本脚本可重复执行 -- -- 注意:这是**平台库**表,不需要登记到 table_info / table_field -- (那两张表只服务于案件库的业务表语义检索)。 -- ============================================================================ -- --------------------------------------------------------------------------- -- 1. 用户表 -- -- 设计说明(「不做权限体系」的落地方式): -- * 只有 is_admin 一个标志,作用域仅限「能否调用 /user/** + 看到"用户管理"入口」; -- * 不建 sys_role / sys_menu / sys_permission / sys_user_role; -- * 不实现 sa-token 的 StpInterface,StpUtil.hasRole / checkPermission 一律不用; -- * 前端路由仍由本地静态 menu.json 生成,permCodeList 保持空。 -- --------------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS sys_user ( id BIGSERIAL PRIMARY KEY, username VARCHAR(64) NOT NULL, -- BCrypt 哈希(60 字符),预留余量 pwd_hash VARCHAR(100) NOT NULL, display_name VARCHAR(64), -- 1=管理员 0=普通用户 is_admin SMALLINT NOT NULL DEFAULT 0, -- 1=启用 0=停用 status SMALLINT NOT NULL DEFAULT 1, create_time TIMESTAMP NOT NULL DEFAULT now(), update_time TIMESTAMP, last_login_time TIMESTAMP ); -- 用户名不区分大小写唯一 CREATE UNIQUE INDEX IF NOT EXISTS uk_sys_user_username ON sys_user (lower(username)); COMMENT ON TABLE sys_user IS '系统用户表(仅认证,不做权限体系)'; COMMENT ON COLUMN sys_user.pwd_hash IS 'BCrypt 密码哈希'; COMMENT ON COLUMN sys_user.is_admin IS '1=管理员(可调用 /user/**) 0=普通用户'; COMMENT ON COLUMN sys_user.status IS '1=启用 0=停用'; -- --------------------------------------------------------------------------- -- 2. 内置管理员 -- -- 初始账号:admin / admin123 ← 首次登录后请立即通过「修改密码」更改 -- (此处只存 BCrypt 哈希,明文见上方注释与本仓库的 user-auth-datasource-plan.md) -- --------------------------------------------------------------------------- INSERT INTO sys_user (username, pwd_hash, display_name, is_admin, status) SELECT 'admin', '$2a$10$dwBgMS1xW2PbUsuce16g/ujiVEH2H4pAjWoyeSMqLClwfOs1N9fri', '系统管理员', 1, 1 WHERE NOT EXISTS (SELECT 1 FROM sys_user WHERE lower(username) = 'admin'); -- --------------------------------------------------------------------------- -- 3. 案件归属 -- -- 存量说明:case_info 原本**没有** name 唯一约束(重名是应用层 lambdaQuery().count() 判的), -- 因此「允许不同用户同名案件」只需把应用层判重加上 owner_id 过滤,无需改数据库约束。 -- --------------------------------------------------------------------------- ALTER TABLE case_info ADD COLUMN IF NOT EXISTS owner_id BIGINT; CREATE INDEX IF NOT EXISTS idx_case_info_owner ON case_info (owner_id); COMMENT ON COLUMN case_info.owner_id IS '案件归属用户 ID(sys_user.id),仅创建者可见'; -- 存量案件统一归给 admin UPDATE case_info SET owner_id = (SELECT id FROM sys_user WHERE lower(username) = 'admin') WHERE owner_id IS NULL; -- --------------------------------------------------------------------------- -- 4. 校验 -- --------------------------------------------------------------------------- -- SELECT id, username, display_name, is_admin, status FROM sys_user ORDER BY id; -- SELECT id, name, owner_id FROM case_info ORDER BY id;