user.sql 3.9 KB

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