综合档案管理系统多门类管理全流程配置校验与落地实操指南
一、前置准备
1.1 环境要求
操作系统:CentOS 7.9+ / Ubuntu 20.04+
运行环境:Python 3.8+、MySQL 5.7+/8.0、Redis 6.0+
基础框架:Django 4.2、Django REST Framework 3.14
1.2 依赖安装
执行以下命令一键安装所有依赖:
```shell pip install django==4.2 djangorestframework==3.14 django-filter==23.1 mysqlclient==2.1.1 redis==4.5.4 ```安装完成后执行python -V和pip list确认所有依赖版本匹配,避免后续兼容性问题
二、多门类档案元数据配置
2.1 创建门类配置表
在项目apps/archive/models.py文件中新增以下代码,可直接复制使用:
```python from django.db import models class ArchiveCategory(models.Model): CATEGORY_TYPE = ( ("text", "文书档案"), ("tech", "科技档案"), ("person", "人事档案"), ("finance", "会计档案"), ("special", "特种档案"), ) category_code = models.CharField(max_length=32, unique=True, verbose_name="门类编码") category_name = models.CharField(max_length=64, verbose_name="门类名称") category_type = models.CharField(max_length=32, choices=CATEGORY_TYPE, verbose_name="门类大类") meta_fields = models.JSONField(default=dict, verbose_name="自定义元字段") is_active = models.BooleanField(default=True, verbose_name="是否启用") create_time = models.DateTimeField(auto_now_add=True) update_time = models.DateTimeField(auto_now=True) class Meta: db_table = "archive_category" verbose_name = "档案门类配置" verbose_name_plural = verbose_name ```2.2 执行表结构迁移
操作前必须先备份现有MySQL数据库,避免表结构冲突导致数据丢失,依次执行以下命令:
```shell python manage.py makemigrations archive python manage.py migrate archive ```2.3 配置各门类自定义元数据
登录系统后台,在档案门类配置模块新增对应门类,自定义元字段采用JSON格式存储,以下为人事档案的标准配置示例,可直接修改复用:
```json { "fields": [ {"field_name": "name", "field_label": "姓名", "field_type": "string", "is_required": true, "sort": 1}, {"field_name": "id_card", "field_label": "身份证号", "field_type": "string", "is_required": true, "sort": 2}, {"field_name": "department", "field_label": "所属部门", "field_type": "select", "option": ["技术部", "市场部", "行政部", "财务部"], "is_required": true, "sort": 3}, {"field_name": "entry_time", "field_label": "入职时间", "field_type": "date", "is_required": true, "sort": 4}, {"field_name": "post", "field_label": "岗位", "field_type": "string", "is_required": false, "sort": 5} ] } ```其他门类配置仅需修改fields数组内的字段信息即可,field_type支持string、number、date、select、file五种类型。
三、门类权限映射配置
3.1 新增权限关联表

在apps/archive/models.py中新增角色-门类权限关联表代码:
```python from django.contrib.auth.models import Role class CategoryRolePerm(models.Model): PERM_TYPE = ( ("view", "查看"), ("edit", "编辑"), ("delete", "删除"), ("archive", "归档"), ) role = models.ForeignKey(Role, on_delete=models.CASCADE, verbose_name="关联角色") category = models.ForeignKey(ArchiveCategory, on_delete=models.CASCADE, verbose_name="关联门类") perm = models.CharField(max_length=32, choices=PERM_TYPE, verbose_name="权限类型") class Meta: db_table = "category_role_perm" unique_together = ("role", "category", "perm") verbose_name = "门类角色权限" ```执行迁移命令更新表结构,操作同2.2步骤。
3.2 前端权限拦截配置
如果前端采用Vue开发,可直接在路由守卫中新增以下拦截逻辑,避免越权访问:
```javascript router.beforeEach((to, from, next) => { const userCategoryPerm = JSON.parse(localStorage.getItem('userCategoryPerm') || '[]') // 拦截档案详情、编辑、归档页的越权访问 if (to.meta.needCategoryPerm) { const currentCategoryCode = to.query.categoryCode const hasPerm = userCategoryPerm.some(item => item.category_code === currentCategoryCode) if (!hasPerm) { next('/403') return } } next() }) ```后端接口必须同步增加权限校验,禁止仅依赖前端拦截,避免接口被恶意调用
四、分门类归档校验规则配置
不同门类档案的校验规则不同,在项目settings.py中新增全局校验规则配置,可直接复制修改:
```python 分门类归档校验规则,key为门类编码,value为对应校验规则数组 ARCHIVE_CHECK_RULE = { "finance_001": [ {"field": "voucher_no", "rule": "not_empty", "err_msg": "会计档案凭证号不能为空"}, {"field": "voucher_date", "rule": "date_format", "format": "%Y-%m-%d", "err_msg": "凭证日期格式需为YYYY-MM-DD"} ], "person_001": [ {"field": "id_card", "rule": "regex", "regex": r'^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$', "err_msg": "身份证号格式错误"} ], "text_001": [ {"field": "doc_no", "rule": "not_empty", "err_msg": "文书档案文号不能为空"}, {"field": "public_date", "rule": "date_format", "format": "%Y-%m-%d", "err_msg": "发文日期格式需为YYYY-MM-DD"} ] } ```归档接口调用时,先获取当前档案对应的门类编码,匹配对应规则执行校验,校验不通过直接返回错误信息,禁止非法数据入库。
五、落地效果验证
完成以上配置后,依次执行以下验证步骤,确认功能正常:
- 新增档案测试:分别录入人事、会计、文书类档案,提交后查看数据库archive表对应字段存储是否正常,自定义元数据是否完整
- 权限验证:使用仅授权人事档案权限的普通账号,尝试访问会计档案编辑页,确认前端跳转403、后端接口返回403状态码
- 校验规则验证:录入人事档案时填写16位错误身份证号,确认系统返回对应错误提示,无法提交归档
- 检索测试:按门类筛选档案,确认返回结果仅包含对应门类数据,无跨门类数据混淆
六、常见问题排查
- 执行迁移时报表结构冲突:先执行python manage.py migrate --fake archive 0001,再重新执行迁移命令即可
- 自定义元字段前端不显示:检查JSON配置格式是否正确,可通过https://www.json.cn/ 在线校验格式,避免多余逗号、引号不闭合问题
- 权限拦截不生效:检查localStorage存储的权限数据是否正确,路由守卫是否正确获取请求路径的categoryCode参数
- 归档校验规则不触发:检查当前档案的门类编码是否与ARCHIVE_CHECK_RULE中的key完全匹配,区分大小写