文档列表documents添加用户id的限制,添加通过统一认证之后数据库中用户数据的添加和角色的添加,添加Sidebar菜单通过数据库请求获取
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
Navicat Premium Data Transfer
|
||||
|
||||
Source Server : 智慧法务
|
||||
Source Server Type : PostgreSQL
|
||||
Source Server Version : 170005
|
||||
Source Host : nas.7bm.co:54302
|
||||
Source Catalog : docauditai
|
||||
Source Schema : public
|
||||
|
||||
Target Server Type : PostgreSQL
|
||||
Target Server Version : 170005
|
||||
File Encoding : 65001
|
||||
|
||||
Date: 20/07/2025 19:51:40
|
||||
*/
|
||||
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for role_route
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS "public"."role_route";
|
||||
CREATE TABLE "public"."role_route" (
|
||||
"id" int4 NOT NULL DEFAULT nextval('role_route_id_seq'::regclass),
|
||||
"role_id" int4 NOT NULL,
|
||||
"route_id" int4 NOT NULL,
|
||||
"permission" varchar(10) COLLATE "pg_catalog"."default" DEFAULT 'RW'::character varying,
|
||||
"created_at" timestamptz(6) DEFAULT now(),
|
||||
"updated_at" timestamptz(6) DEFAULT now()
|
||||
)
|
||||
;
|
||||
COMMENT ON COLUMN "public"."role_route"."id" IS '主键ID';
|
||||
COMMENT ON COLUMN "public"."role_route"."role_id" IS '角色ID';
|
||||
COMMENT ON COLUMN "public"."role_route"."route_id" IS '路由ID';
|
||||
COMMENT ON COLUMN "public"."role_route"."permission" IS '权限类型(R=读, W=写, RW=读写)';
|
||||
COMMENT ON COLUMN "public"."role_route"."created_at" IS '创建时间';
|
||||
COMMENT ON COLUMN "public"."role_route"."updated_at" IS '更新时间';
|
||||
COMMENT ON TABLE "public"."role_route" IS '角色-路由权限关联表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Triggers structure for table role_route
|
||||
-- ----------------------------
|
||||
CREATE TRIGGER "update_role_route_updated_at" BEFORE UPDATE ON "public"."role_route"
|
||||
FOR EACH ROW
|
||||
EXECUTE PROCEDURE "public"."update_updated_at"();
|
||||
|
||||
-- ----------------------------
|
||||
-- Uniques structure for table role_route
|
||||
-- ----------------------------
|
||||
ALTER TABLE "public"."role_route" ADD CONSTRAINT "role_route_role_id_route_id_key" UNIQUE ("role_id", "route_id");
|
||||
|
||||
-- ----------------------------
|
||||
-- Primary Key structure for table role_route
|
||||
-- ----------------------------
|
||||
ALTER TABLE "public"."role_route" ADD CONSTRAINT "role_route_pkey" PRIMARY KEY ("id");
|
||||
|
||||
-- ----------------------------
|
||||
-- Foreign Keys structure for table role_route
|
||||
-- ----------------------------
|
||||
ALTER TABLE "public"."role_route" ADD CONSTRAINT "fk_role_route_role" FOREIGN KEY ("role_id") REFERENCES "public"."roles" ("id") ON DELETE CASCADE ON UPDATE NO ACTION;
|
||||
ALTER TABLE "public"."role_route" ADD CONSTRAINT "fk_role_route_route" FOREIGN KEY ("route_id") REFERENCES "public"."sys_routes" ("id") ON DELETE CASCADE ON UPDATE NO ACTION;
|
||||
@@ -0,0 +1,63 @@
|
||||
-- 角色路由权限数据插入脚本
|
||||
-- 根据sys_routes_insert.sql中的路由数据和roles.sql中的角色数据进行关联
|
||||
|
||||
-- 清理现有数据(可选)
|
||||
-- DELETE FROM role_route WHERE id > 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- 为admin角色分配全部路由权限
|
||||
-- ----------------------------
|
||||
INSERT INTO role_route (role_id, route_id, permission)
|
||||
SELECT 1, id, 'RW' FROM sys_routes;
|
||||
|
||||
-- ----------------------------
|
||||
-- 为common角色分配基础路由权限
|
||||
-- ----------------------------
|
||||
INSERT INTO role_route (role_id, route_id, permission)
|
||||
SELECT 2, id, 'RW' FROM sys_routes WHERE name IN (
|
||||
'home',
|
||||
'file-management', 'file-upload', 'documents',
|
||||
'rule-management', 'rule-groups', 'rules-list', 'rules-file',
|
||||
'contract-template', 'contract-search-ai', 'contract-list',
|
||||
'cross-checking'
|
||||
) ON CONFLICT (role_id, route_id) DO NOTHING;
|
||||
|
||||
-- ----------------------------
|
||||
-- 为deptLeader角色分配扩展权限
|
||||
-- ----------------------------
|
||||
INSERT INTO role_route (role_id, route_id, permission)
|
||||
SELECT 3, id, 'RW' FROM sys_routes WHERE name IN (
|
||||
'home',
|
||||
'chat-with-llm',
|
||||
'file-management', 'file-upload', 'documents',
|
||||
'rule-management', 'rule-groups', 'rules-list', 'rules-file',
|
||||
'contract-template', 'contract-search-ai', 'contract-list',
|
||||
'cross-checking'
|
||||
) ON CONFLICT (role_id, route_id) DO NOTHING;
|
||||
|
||||
-- ----------------------------
|
||||
-- 为groupLeader角色分配小组权限
|
||||
-- ----------------------------
|
||||
INSERT INTO role_route (role_id, route_id, permission)
|
||||
SELECT 4, id, 'RW' FROM sys_routes WHERE name IN (
|
||||
'home',
|
||||
'file-management', 'file-upload', 'documents',
|
||||
'rule-management', 'rule-groups', 'rules-list', 'rules-file',
|
||||
'contract-template', 'contract-search-ai', 'contract-list',
|
||||
'cross-checking'
|
||||
) ON CONFLICT (role_id, route_id) DO NOTHING;
|
||||
|
||||
-- ----------------------------
|
||||
-- 查询角色权限分配结果
|
||||
-- ----------------------------
|
||||
SELECT
|
||||
r.role_name,
|
||||
sr.name as route_name,
|
||||
sr.path,
|
||||
sr.meta->>'title' as route_title,
|
||||
rr.permission
|
||||
FROM role_route rr
|
||||
JOIN roles r ON rr.role_id = r.id
|
||||
JOIN sys_routes sr ON rr.route_id = sr.id
|
||||
WHERE sr.parent_id = 0 -- 只显示一级菜单
|
||||
ORDER BY r.id, (sr.meta->>'order')::int;
|
||||
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
Navicat Premium Data Transfer
|
||||
|
||||
Source Server : 智慧法务
|
||||
Source Server Type : PostgreSQL
|
||||
Source Server Version : 170005
|
||||
Source Host : nas.7bm.co:54302
|
||||
Source Catalog : docauditai
|
||||
Source Schema : public
|
||||
|
||||
Target Server Type : PostgreSQL
|
||||
Target Server Version : 170005
|
||||
File Encoding : 65001
|
||||
|
||||
Date: 18/07/2025 20:16:41
|
||||
*/
|
||||
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for roles
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS "public"."roles";
|
||||
CREATE TABLE "public"."roles" (
|
||||
"id" int4 NOT NULL DEFAULT nextval('user_role_id_seq'::regclass),
|
||||
"role_key" varchar(30) COLLATE "pg_catalog"."default" NOT NULL,
|
||||
"role_name" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
|
||||
"data_scope" varchar(20) COLLATE "pg_catalog"."default" DEFAULT 'SELF'::character varying,
|
||||
"description" varchar(200) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
|
||||
"created_at" timestamptz(6) DEFAULT now(),
|
||||
"updated_at" timestamptz(6) DEFAULT now()
|
||||
)
|
||||
;
|
||||
COMMENT ON COLUMN "public"."roles"."id" IS '角色ID';
|
||||
COMMENT ON COLUMN "public"."roles"."role_key" IS '角色标识(如:admin, common, deptLeader, groupLeader)';
|
||||
COMMENT ON COLUMN "public"."roles"."role_name" IS '角色名称(如:系统管理员, 普通员工)';
|
||||
COMMENT ON COLUMN "public"."roles"."data_scope" IS '数据权限范围(SELF=仅自己, GROUP=本组, DEPT=本部门, ALL=全部)';
|
||||
COMMENT ON COLUMN "public"."roles"."description" IS '角色描述';
|
||||
COMMENT ON COLUMN "public"."roles"."created_at" IS '创建时间';
|
||||
COMMENT ON COLUMN "public"."roles"."updated_at" IS '更新时间';
|
||||
COMMENT ON TABLE "public"."roles" IS '系统角色表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of roles
|
||||
-- ----------------------------
|
||||
INSERT INTO "public"."roles" VALUES (1, 'admin', '系统管理员', 'ALL', '拥有系统全部操作权限', '2025-07-18 02:35:39.367459+00', '2025-07-18 02:35:39.367459+00');
|
||||
INSERT INTO "public"."roles" VALUES (2, 'common', '普通员工', 'SELF', '仅能操作自己的数据', '2025-07-18 02:35:39.367459+00', '2025-07-18 02:35:39.367459+00');
|
||||
INSERT INTO "public"."roles" VALUES (3, 'deptLeader', '部门主管', 'DEPT', '可操作本部门的数据', '2025-07-18 02:35:39.367459+00', '2025-07-18 02:35:39.367459+00');
|
||||
INSERT INTO "public"."roles" VALUES (4, 'groupLeader', '小组组长', 'GROUP', '可操作本小组的数据', '2025-07-18 02:35:39.367459+00', '2025-07-18 02:35:39.367459+00');
|
||||
|
||||
-- ----------------------------
|
||||
-- Triggers structure for table roles
|
||||
-- ----------------------------
|
||||
CREATE TRIGGER "update_user_role_updated_at" BEFORE UPDATE ON "public"."roles"
|
||||
FOR EACH ROW
|
||||
EXECUTE PROCEDURE "public"."update_updated_at"();
|
||||
|
||||
-- ----------------------------
|
||||
-- Uniques structure for table roles
|
||||
-- ----------------------------
|
||||
ALTER TABLE "public"."roles" ADD CONSTRAINT "roles_role_key_key" UNIQUE ("role_key");
|
||||
|
||||
-- ----------------------------
|
||||
-- Primary Key structure for table roles
|
||||
-- ----------------------------
|
||||
ALTER TABLE "public"."roles" ADD CONSTRAINT "user_role_pkey" PRIMARY KEY ("id");
|
||||
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
Navicat Premium Data Transfer
|
||||
|
||||
Source Server : 智慧法务
|
||||
Source Server Type : PostgreSQL
|
||||
Source Server Version : 170005
|
||||
Source Host : nas.7bm.co:54302
|
||||
Source Catalog : docauditai
|
||||
Source Schema : public
|
||||
|
||||
Target Server Type : PostgreSQL
|
||||
Target Server Version : 170005
|
||||
File Encoding : 65001
|
||||
|
||||
Date: 17/07/2025 21:07:07
|
||||
*/
|
||||
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sso_users
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS "public"."sso_users";
|
||||
CREATE TABLE "public"."sso_users" (
|
||||
"id" uuid NOT NULL DEFAULT gen_random_uuid(),
|
||||
"sub" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
|
||||
"username" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
|
||||
"nick_name" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
|
||||
"phone_number" varchar(20) COLLATE "pg_catalog"."default",
|
||||
"email" varchar(255) COLLATE "pg_catalog"."default",
|
||||
"ou_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
|
||||
"ou_name" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
|
||||
"status" int2 DEFAULT 0,
|
||||
"is_leader" bool DEFAULT false,
|
||||
"created_at" timestamp(6) DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" timestamp(6) DEFAULT CURRENT_TIMESTAMP,
|
||||
"deleted_at" timestamp(6)
|
||||
)
|
||||
;
|
||||
COMMENT ON COLUMN "public"."sso_users"."id" IS '主键,数据库自增或全局唯一';
|
||||
COMMENT ON COLUMN "public"."sso_users"."sub" IS 'IDaaS用户唯一标识(身份证号级别)';
|
||||
COMMENT ON COLUMN "public"."sso_users"."username" IS '显示用户名称/工号';
|
||||
COMMENT ON COLUMN "public"."sso_users"."nick_name" IS '用户真实姓名';
|
||||
COMMENT ON COLUMN "public"."sso_users"."phone_number" IS '手机号';
|
||||
COMMENT ON COLUMN "public"."sso_users"."email" IS '邮箱地址(可为空)';
|
||||
COMMENT ON COLUMN "public"."sso_users"."ou_id" IS '所属组织单位ID(部门ID)';
|
||||
COMMENT ON COLUMN "public"."sso_users"."ou_name" IS '所属部门名称';
|
||||
COMMENT ON COLUMN "public"."sso_users"."status" IS '账户状态: 0=正常, 1=禁用';
|
||||
COMMENT ON COLUMN "public"."sso_users"."is_leader" IS '是否为部门负责人';
|
||||
COMMENT ON COLUMN "public"."sso_users"."created_at" IS '创建时间';
|
||||
COMMENT ON COLUMN "public"."sso_users"."updated_at" IS '更新时间';
|
||||
COMMENT ON COLUMN "public"."sso_users"."deleted_at" IS '删除时间(软删除)';
|
||||
COMMENT ON TABLE "public"."sso_users" IS '统一登录用户表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Indexes structure for table sso_users
|
||||
-- ----------------------------
|
||||
CREATE INDEX "idx_sso_users_deleted_at" ON "public"."sso_users" USING btree (
|
||||
"deleted_at" "pg_catalog"."timestamp_ops" ASC NULLS LAST
|
||||
);
|
||||
CREATE INDEX "idx_sso_users_is_leader" ON "public"."sso_users" USING btree (
|
||||
"is_leader" "pg_catalog"."bool_ops" ASC NULLS LAST
|
||||
);
|
||||
CREATE INDEX "idx_sso_users_ou_id" ON "public"."sso_users" USING btree (
|
||||
"ou_id" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
|
||||
);
|
||||
CREATE INDEX "idx_sso_users_status" ON "public"."sso_users" USING btree (
|
||||
"status" "pg_catalog"."int2_ops" ASC NULLS LAST
|
||||
);
|
||||
CREATE INDEX "idx_sso_users_sub" ON "public"."sso_users" USING btree (
|
||||
"sub" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
|
||||
);
|
||||
CREATE INDEX "idx_sso_users_username" ON "public"."sso_users" USING btree (
|
||||
"username" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
|
||||
);
|
||||
|
||||
-- ----------------------------
|
||||
-- Uniques structure for table sso_users
|
||||
-- ----------------------------
|
||||
ALTER TABLE "public"."sso_users" ADD CONSTRAINT "sso_users_sub_key" UNIQUE ("sub");
|
||||
|
||||
-- ----------------------------
|
||||
-- Primary Key structure for table sso_users
|
||||
-- ----------------------------
|
||||
ALTER TABLE "public"."sso_users" ADD CONSTRAINT "sso_users_pkey" PRIMARY KEY ("id");
|
||||
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
Navicat Premium Data Transfer
|
||||
|
||||
Source Server : 智慧法务
|
||||
Source Server Type : PostgreSQL
|
||||
Source Server Version : 170005
|
||||
Source Host : nas.7bm.co:54302
|
||||
Source Catalog : docauditai
|
||||
Source Schema : public
|
||||
|
||||
Target Server Type : PostgreSQL
|
||||
Target Server Version : 170005
|
||||
File Encoding : 65001
|
||||
|
||||
Date: 18/07/2025 15:16:47
|
||||
*/
|
||||
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_routes
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS "public"."sys_routes";
|
||||
CREATE TABLE "public"."sys_routes" (
|
||||
"id" int4 NOT NULL DEFAULT nextval('sys_route_id_seq'::regclass),
|
||||
"path" varchar(100) COLLATE "pg_catalog"."default" NOT NULL,
|
||||
"name" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
|
||||
"meta" json NOT NULL,
|
||||
"parent_id" int4 DEFAULT 0,
|
||||
"is_menu" int2 DEFAULT 1,
|
||||
"create_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP,
|
||||
"update_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
;
|
||||
COMMENT ON COLUMN "public"."sys_routes"."id" IS '路由ID';
|
||||
COMMENT ON COLUMN "public"."sys_routes"."path" IS '路由路径(如:/user/list)';
|
||||
COMMENT ON COLUMN "public"."sys_routes"."name" IS '路由唯一标识(前端组件名)';
|
||||
COMMENT ON COLUMN "public"."sys_routes"."meta" IS '元数据(存储图标/排序/隐藏等配置)';
|
||||
COMMENT ON COLUMN "public"."sys_routes"."parent_id" IS '父路由ID(0=根节点)';
|
||||
COMMENT ON COLUMN "public"."sys_routes"."is_menu" IS '是否菜单项(0=接口权限, 1=菜单项)';
|
||||
COMMENT ON COLUMN "public"."sys_routes"."create_time" IS '创建时间';
|
||||
COMMENT ON COLUMN "public"."sys_routes"."update_time" IS '更新时间';
|
||||
COMMENT ON TABLE "public"."sys_routes" IS '系统路由权限表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Indexes structure for table sys_routes
|
||||
-- ----------------------------
|
||||
CREATE INDEX "idx_parent_id" ON "public"."sys_routes" USING btree (
|
||||
"parent_id" "pg_catalog"."int4_ops" ASC NULLS LAST
|
||||
);
|
||||
|
||||
-- ----------------------------
|
||||
-- Uniques structure for table sys_routes
|
||||
-- ----------------------------
|
||||
ALTER TABLE "public"."sys_routes" ADD CONSTRAINT "uniq_route_name" UNIQUE ("name");
|
||||
|
||||
-- ----------------------------
|
||||
-- Primary Key structure for table sys_routes
|
||||
-- ----------------------------
|
||||
ALTER TABLE "public"."sys_routes" ADD CONSTRAINT "sys_route_pkey" PRIMARY KEY ("id");
|
||||
@@ -0,0 +1,93 @@
|
||||
-- 根据 Sidebar.tsx 菜单项生成的 sys_routes 表插入语句
|
||||
-- 智慧法务系统路由权限数据
|
||||
|
||||
-- 清理现有数据(可选)
|
||||
-- DELETE FROM sys_routes WHERE id > 0;
|
||||
-- ALTER SEQUENCE sys_route_id_seq RESTART WITH 1;
|
||||
|
||||
-- 插入一级菜单项
|
||||
INSERT INTO sys_routes (path, name, meta, parent_id, is_menu) VALUES
|
||||
-- 系统概览
|
||||
('/home', 'home', '{"title": "系统概览", "icon": "ri-home-line", "order": 1}', 0, 1),
|
||||
|
||||
-- AI对话
|
||||
('/chat-with-llm', 'chat-with-llm', '{"title": "AI对话", "icon": "ri-chat-smile-2-line", "order": 2}', 0, 1),
|
||||
|
||||
-- 文件管理(父菜单)
|
||||
('/files', 'file-management', '{"title": "文件管理", "icon": "ri-folder-line", "order": 3}', 0, 1),
|
||||
|
||||
-- 评查规则库(父菜单)
|
||||
('/rules', 'rule-management', '{"title": "评查规则库", "icon": "ri-book-3-line", "order": 4}', 0, 1),
|
||||
|
||||
-- 合同模板(父菜单)
|
||||
('/contract-template', 'contract-template', '{"title": "合同模板", "icon": "ri-file-search-line", "order": 5}', 0, 1),
|
||||
|
||||
-- 系统设置(父菜单,需要developer权限)
|
||||
('/settings', 'system-settings', '{"title": "系统设置", "icon": "ri-settings-4-line", "order": 6, "requiredRole": "developer"}', 0, 1);
|
||||
|
||||
-- 交叉评查(父菜单)
|
||||
('/cross-checking', 'cross-checking', '{"title": "交叉评查", "icon": "ri-color-filter-line", "order": 7}', 0, 1);
|
||||
|
||||
-- 插入文件管理的子菜单项
|
||||
INSERT INTO sys_routes (path, name, meta, parent_id, is_menu) VALUES
|
||||
-- 文件上传(文件管理的子菜单,parent_id需要根据实际的file-management记录ID调整)
|
||||
('/files/upload', 'file-upload', '{"title": "文件上传", "icon": "ri-upload-cloud-line", "order": 1}',
|
||||
(SELECT id FROM sys_routes WHERE name = 'file-management'), 1),
|
||||
|
||||
-- 文档列表(文件管理的子菜单)
|
||||
('/documents', 'documents', '{"title": "文档列表", "icon": "ri-file-list-3-line", "order": 2}',
|
||||
(SELECT id FROM sys_routes WHERE name = 'file-management'), 1);
|
||||
|
||||
-- 插入评查规则库的子菜单项
|
||||
INSERT INTO sys_routes (path, name, meta, parent_id, is_menu) VALUES
|
||||
-- 评查点分组(评查规则库的子菜单)
|
||||
('/rule-groups', 'rule-groups', '{"title": "评查点分组", "icon": "ri-folder-open-line", "order": 1}',
|
||||
(SELECT id FROM sys_routes WHERE name = 'rule-management'), 1),
|
||||
|
||||
-- 评查点列表(评查规则库的子菜单)
|
||||
('/rules', 'rules-list', '{"title": "评查点列表", "icon": "ri-list-check-3", "order": 2}',
|
||||
(SELECT id FROM sys_routes WHERE name = 'rule-management'), 1),
|
||||
|
||||
-- 评查文件列表(评查规则库的子菜单)
|
||||
('/rules-files', 'rules-file', '{"title": "评查文件列表", "icon": "ri-list-check-2", "order": 3}',
|
||||
(SELECT id FROM sys_routes WHERE name = 'rule-management'), 1),
|
||||
|
||||
-- 插入合同模板的子菜单项
|
||||
INSERT INTO sys_routes (path, name, meta, parent_id, is_menu) VALUES
|
||||
-- 智能搜索(合同模板的子菜单)
|
||||
('/contract-template/search', 'contract-search-ai', '{"title": "智能搜索", "icon": "ri-search-line", "order": 1}',
|
||||
(SELECT id FROM sys_routes WHERE name = 'contract-template'), 1),
|
||||
|
||||
-- 合同列表(合同模板的子菜单)
|
||||
('/contract-template/list', 'contract-list', '{"title": "合同列表", "icon": "ri-folder-line", "order": 2}',
|
||||
(SELECT id FROM sys_routes WHERE name = 'contract-template'), 1);
|
||||
|
||||
-- 插入系统设置的子菜单项(需要developer权限)
|
||||
INSERT INTO sys_routes (path, name, meta, parent_id, is_menu) VALUES
|
||||
-- 配置列表(系统设置的子菜单,需要developer权限)
|
||||
('/config-lists', 'config-lists', '{"title": "配置列表", "icon": "ri-list-check-3", "order": 1, "requiredRole": "developer"}',
|
||||
(SELECT id FROM sys_routes WHERE name = 'system-settings'), 1),
|
||||
|
||||
-- 文档类型(系统设置的子菜单,需要developer权限)
|
||||
('/document-types', 'document-types', '{"title": "文档类型", "icon": "ri-file-list-line", "order": 2, "requiredRole": "developer"}',
|
||||
(SELECT id FROM sys_routes WHERE name = 'system-settings'), 1),
|
||||
|
||||
-- 提示词管理(系统设置的子菜单,需要developer权限)
|
||||
('/prompts', 'prompt-management', '{"title": "提示词管理", "icon": "ri-chat-1-line", "order": 3, "requiredRole": "developer"}',
|
||||
(SELECT id FROM sys_routes WHERE name = 'system-settings'), 1);
|
||||
|
||||
-- 查询插入结果
|
||||
SELECT
|
||||
r1.id,
|
||||
r1.path,
|
||||
r1.name,
|
||||
r1.meta,
|
||||
r1.parent_id,
|
||||
r2.name as parent_name,
|
||||
r1.is_menu
|
||||
FROM sys_routes r1
|
||||
LEFT JOIN sys_routes r2 ON r1.parent_id = r2.id
|
||||
ORDER BY
|
||||
CASE WHEN r1.parent_id = 0 THEN r1.id ELSE r1.parent_id END,
|
||||
r1.parent_id,
|
||||
(r1.meta->>'order')::int;
|
||||
@@ -0,0 +1,46 @@
|
||||
-- 为测试用户添加默认角色的脚本
|
||||
-- 测试用户信息:sub='001', username='testuser1'
|
||||
|
||||
-- 首先查找测试用户
|
||||
DO $$
|
||||
DECLARE
|
||||
test_user_id uuid;
|
||||
existing_role_count integer;
|
||||
BEGIN
|
||||
-- 查找测试用户的ID
|
||||
SELECT id INTO test_user_id
|
||||
FROM sso_users
|
||||
WHERE sub = '001' AND username = 'testuser1';
|
||||
|
||||
IF test_user_id IS NOT NULL THEN
|
||||
-- 检查用户是否已经有common角色(role_id = 2)
|
||||
SELECT COUNT(*) INTO existing_role_count
|
||||
FROM user_role
|
||||
WHERE user_id = test_user_id AND role_id = 2;
|
||||
|
||||
IF existing_role_count = 0 THEN
|
||||
-- 为用户添加common角色
|
||||
INSERT INTO user_role (user_id, role_id)
|
||||
VALUES (test_user_id, 2);
|
||||
|
||||
RAISE NOTICE '已为测试用户(%)添加默认角色(common)', test_user_id;
|
||||
ELSE
|
||||
RAISE NOTICE '测试用户(%)已经拥有默认角色(common)', test_user_id;
|
||||
END IF;
|
||||
ELSE
|
||||
RAISE NOTICE '测试用户不存在,请先创建用户';
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- 验证结果
|
||||
SELECT
|
||||
u.id,
|
||||
u.sub,
|
||||
u.username,
|
||||
u.nick_name,
|
||||
r.role_key,
|
||||
r.role_name
|
||||
FROM sso_users u
|
||||
LEFT JOIN user_role ur ON u.id = ur.user_id
|
||||
LEFT JOIN roles r ON ur.role_id = r.id
|
||||
WHERE u.sub = '001' AND u.username = 'testuser1';
|
||||
@@ -0,0 +1,86 @@
|
||||
CREATE OR REPLACE FUNCTION "public"."get_documents_with_filters"("search_name" text=NULL::text, "search_document_number" text=NULL::text, "search_document_types" _int4=NULL::integer[], "search_audit_status" int4=NULL::integer, "search_file_status" text=NULL::text, "search_date_from" date=NULL::date, "search_date_to" date=NULL::date, "search_user_id" int4=NULL::integer, "page" int4=1, "page_size" int4=10)
|
||||
RETURNS TABLE("id" int4, "name" varchar, "document_number" varchar, "type_id" int4, "audit_status" int4, "status" varchar, "upload_time" timestamp, "updated_at" timestamptz, "file_size" int4, "path" varchar, "is_test_document" bool, "ocr_result" jsonb, "type_name" varchar, "false_count" int8) AS $BODY$
|
||||
DECLARE
|
||||
offset_val integer;
|
||||
BEGIN
|
||||
offset_val := (page - 1) * page_size;
|
||||
|
||||
-- 如果search_user_id为NULL,直接返回空结果
|
||||
IF search_user_id IS NULL THEN
|
||||
RETURN;
|
||||
END IF;
|
||||
|
||||
RETURN QUERY
|
||||
WITH paginated_documents AS (
|
||||
SELECT d.id
|
||||
FROM documents d
|
||||
WHERE (search_name IS NULL OR d.name ILIKE '%' || search_name || '%')
|
||||
AND (search_document_number IS NULL OR d.document_number ILIKE '%' || search_document_number || '%')
|
||||
AND (search_document_types IS NULL OR d.type_id = ANY(search_document_types))
|
||||
AND (search_audit_status IS NULL OR
|
||||
(CASE WHEN search_audit_status = 0 THEN d.audit_status IS NULL OR d.audit_status = 0
|
||||
ELSE d.audit_status = search_audit_status END))
|
||||
AND (search_file_status IS NULL OR d.status = search_file_status)
|
||||
AND (search_date_from IS NULL OR d.updated_at >= search_date_from)
|
||||
AND (search_date_to IS NULL OR d.updated_at < (search_date_to + INTERVAL '1 day'))
|
||||
AND d.user_id = search_user_id -- 强制要求匹配用户ID
|
||||
ORDER BY d.updated_at DESC
|
||||
LIMIT page_size OFFSET offset_val
|
||||
)
|
||||
SELECT
|
||||
d.id,
|
||||
d.name,
|
||||
d.document_number,
|
||||
d.type_id,
|
||||
d.audit_status,
|
||||
d.status,
|
||||
d.upload_time,
|
||||
d.updated_at,
|
||||
d.file_size,
|
||||
d.path,
|
||||
d.is_test_document,
|
||||
d.ocr_result,
|
||||
dt.name AS type_name,
|
||||
COUNT(er.id) FILTER (WHERE (er.evaluated_results ->> 'result')::text = 'false') AS false_count
|
||||
FROM documents d
|
||||
JOIN paginated_documents pd ON d.id = pd.id
|
||||
LEFT JOIN document_types dt ON d.type_id = dt.id
|
||||
LEFT JOIN evaluation_results er ON d.id = er.document_id
|
||||
GROUP BY d.id, dt.name
|
||||
ORDER BY d.updated_at DESC;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE plpgsql STABLE
|
||||
COST 100
|
||||
ROWS 1000
|
||||
|
||||
-- 同时也需要更新 count_documents_with_filters 函数
|
||||
CREATE OR REPLACE FUNCTION "public"."count_documents_with_filters"("search_name" text=NULL::text, "search_document_number" text=NULL::text, "search_document_types" _int4=NULL::integer[], "search_audit_status" int4=NULL::integer, "search_file_status" text=NULL::text, "search_date_from" date=NULL::date, "search_date_to" date=NULL::date, "search_user_id" int4=NULL::integer)
|
||||
RETURNS int4 AS $BODY$
|
||||
DECLARE
|
||||
total_count integer;
|
||||
BEGIN
|
||||
-- 如果search_user_id为NULL,直接返回0
|
||||
IF search_user_id IS NULL THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
|
||||
SELECT COUNT(*)
|
||||
INTO total_count
|
||||
FROM documents d
|
||||
WHERE (search_name IS NULL OR d.name ILIKE '%' || search_name || '%')
|
||||
AND (search_document_number IS NULL OR d.document_number ILIKE '%' || search_document_number || '%')
|
||||
AND (search_document_types IS NULL OR d.type_id = ANY(search_document_types))
|
||||
AND (search_audit_status IS NULL OR
|
||||
(CASE WHEN search_audit_status = 0 THEN d.audit_status IS NULL OR d.audit_status = 0
|
||||
ELSE d.audit_status = search_audit_status END))
|
||||
AND (search_file_status IS NULL OR d.status = search_file_status)
|
||||
AND (search_date_from IS NULL OR d.updated_at >= search_date_from)
|
||||
AND (search_date_to IS NULL OR d.updated_at < (search_date_to + INTERVAL '1 day'))
|
||||
AND d.user_id = search_user_id; -- 强制要求匹配用户ID
|
||||
|
||||
RETURN total_count;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE plpgsql STABLE
|
||||
COST 100
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
Navicat Premium Data Transfer
|
||||
|
||||
Source Server : 智慧法务
|
||||
Source Server Type : PostgreSQL
|
||||
Source Server Version : 170005
|
||||
Source Host : nas.7bm.co:54302
|
||||
Source Catalog : docauditai
|
||||
Source Schema : public
|
||||
|
||||
Target Server Type : PostgreSQL
|
||||
Target Server Version : 170005
|
||||
File Encoding : 65001
|
||||
|
||||
Date: 18/07/2025 20:13:33
|
||||
*/
|
||||
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for user_role
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS "public"."user_role";
|
||||
CREATE TABLE "public"."user_role" (
|
||||
"id" int4 NOT NULL DEFAULT nextval('user_role_id_seq'::regclass),
|
||||
"user_id" int4 NOT NULL,
|
||||
"role_id" int4 NOT NULL,
|
||||
"created_at" timestamptz(6) DEFAULT now(),
|
||||
"updated_at" timestamptz(6) DEFAULT now()
|
||||
)
|
||||
;
|
||||
|
||||
-- ----------------------------
|
||||
-- Triggers structure for table user_role
|
||||
-- ----------------------------
|
||||
CREATE TRIGGER "update_user_role_updated_at" BEFORE UPDATE ON "public"."user_role"
|
||||
FOR EACH ROW
|
||||
EXECUTE PROCEDURE "public"."update_updated_at"();
|
||||
|
||||
-- ----------------------------
|
||||
-- Uniques structure for table user_role
|
||||
-- ----------------------------
|
||||
ALTER TABLE "public"."user_role" ADD CONSTRAINT "user_role_user_id_role_id_key" UNIQUE ("user_id", "role_id");
|
||||
|
||||
-- ----------------------------
|
||||
-- Primary Key structure for table user_role
|
||||
-- ----------------------------
|
||||
ALTER TABLE "public"."user_role" ADD CONSTRAINT "sys_user_role_pkey" PRIMARY KEY ("id");
|
||||
Reference in New Issue
Block a user