本文方案适配绝大多数通用B/S架构档案管理系统,需提前确认你拥有系统管理员身份,提前开通对应权限,准备内容如下:
新增两张核心权限表,适配所有场景的权限配置,以下是可直接在MySQL执行的建表SQL:
```sql -- 部门-档案目录权限关联表 CREATE TABLE `dept_archive_perm` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', `dept_id` bigint NOT NULL COMMENT '部门ID', `catalog_id` bigint NOT NULL COMMENT '档案目录ID', `perm_type` tinyint NOT NULL COMMENT '权限类型:1=查看 2=编辑 3=删除', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_dept` (`dept_id`), KEY `idx_catalog` (`catalog_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门档案权限关联表'; -- 部门特殊权限白名单表 CREATE TABLE `dept_perm_whitelist` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `dept_id` bigint NOT NULL COMMENT '部门ID', `user_id` bigint NOT NULL COMMENT '特殊权限用户ID', `extra_perm` varchar(255) DEFAULT NULL COMMENT '额外权限,逗号分隔', PRIMARY KEY (`id`), KEY `idx_dept_user` (`dept_id`,`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门特殊权限白名单'; ```如果你的系统已经有权限模块,只需要在原有权限表中新增dept_id字段关联部门即可,不需要新建表。
给所有已有部门批量初始化根目录查看权限,执行以下SQL即可一键完成初始化:
```sql -- 批量给所有未删除部门初始化根档案目录查看权限,1代表根目录ID、1代表查看权限 INSERT INTO dept_archive_perm (dept_id, catalog_id, perm_type) SELECT id, 1, 1 FROM sys_dept WHERE deleted = 0; ```
在系统的全局接口拦截器中新增部门权限校验逻辑,以下是SpringBoot项目可直接复用的核心校验代码:
```java // 部门档案权限校验核心方法,直接注入拦截器即可 public boolean checkDeptArchivePerm(Long archiveId, Long userId, Integer requirePerm) { // 1. 获取当前登录用户所属部门ID Long userDeptId = userService.getUserDeptId(userId); // 2. 获取当前操作档案所属的目录ID Long catalogId = archiveService.getArchiveCatalogId(archiveId); // 3. 超级管理员直接放行 if (userService.isAdmin(userId)) { return true; } // 4. 校验白名单特殊权限 if (whitelistService.hasExtraPerm(userDeptId, userId, requirePerm)) { return true; } // 5. 匹配部门权限配置 return permMapper.countMatchPerm(userDeptId, catalogId, requirePerm) > 0; } ```将上述方法注入到所有档案操作接口的前置拦截环节,包括档案列表、查看、编辑、删除接口,未授权访问直接返回403无权限提示即可。
完成开发后,进入管理员后台按以下步骤即可完成业务配置:
配置完成后按以下步骤测试,确认无漏洞:
按照以上步骤操作,即可完成稳定可用、可灵活调整的档案管理部门权限设置,无需对现有系统做大规模架构改造。