| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- -- ============================================================================
- -- 用户体系 + 案件归属迁移脚本
- -- 目标库: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;
|