agentic_huge_data_base / wiki
页面 Mayan EDMS · 5 系统特性·DeepWiki 中文全文译文

5 · 系统特性(System Features)

企业电子文档治理 · 聚焦本章的模块关系、源码依据与实现要点。

项目Mayan EDMS 章节5 状态全文译文 模块文档对象与元数据、工作流与编排、测试、发布与运维、检索、召回与索引
源码线索
  • docs/releases/4.1.9.txt
  • mayan/apps/acls/api_views.py
  • mayan/apps/acls/apps.py
  • mayan/apps/acls/classes.py
  • mayan/apps/acls/icons.py
  • mayan/apps/acls/links.py
  • mayan/apps/acls/managers.py
  • mayan/apps/acls/models.py
  • mayan/apps/acls/serializers.py
  • mayan/apps/acls/tests/mixins.py
模块标签
  • 文档对象与元数据
  • 工作流与编排
  • 测试、发布与运维
  • 检索、召回与索引
  • 认证、权限与安全

章节正文

系统特性

系统功能

相关源文件

以下文件为本 Wiki 页面的生成提供了上下文:

  • docs/releases/4.1.9.txt
  • mayan/apps/acls/api_views.py
  • mayan/apps/acls/apps.py
  • mayan/apps/acls/classes.py
  • mayan/apps/acls/icons.py
  • mayan/apps/acls/links.py
  • mayan/apps/acls/managers.py
  • mayan/apps/acls/models.py
  • mayan/apps/acls/serializers.py
  • mayan/apps/acls/tests/mixins.py
  • mayan/apps/acls/tests/test_api.py
  • mayan/apps/acls/tests/test_links.py
  • mayan/apps/acls/tests/test_models.py
  • mayan/apps/acls/tests/test_views.py
  • mayan/apps/acls/urls.py
  • mayan/apps/acls/views.py
  • mayan/apps/cabinets/api_views.py
  • mayan/apps/cabinets/tests/test_widgets.py
  • mayan/apps/databases/literals.py
  • mayan/apps/document_comments/urls.py
  • mayan/apps/dynamic_search/api_views.py
  • mayan/apps/dynamic_search/backends/django.py
  • mayan/apps/dynamic_search/backends/whoosh.py
  • mayan/apps/dynamic_search/classes.py
  • mayan/apps/dynamic_search/filters.py
  • mayan/apps/dynamic_search/literals.py
  • mayan/apps/dynamic_search/management/commands/search_index_objects.py
  • mayan/apps/dynamic_search/queues.py
  • mayan/apps/dynamic_search/serializers.py
  • mayan/apps/dynamic_search/tasks.py
  • mayan/apps/dynamic_search/templates/dynamic_search/app/list_toolbar.html
  • mayan/apps/dynamic_search/templates/dynamic_search/search_box.html
  • mayan/apps/dynamic_search/tests/backends.py
  • mayan/apps/dynamic_search/tests/mixins.py
  • mayan/apps/dynamic_search/tests/test_backends.py
  • mayan/apps/dynamic_search/tests/test_classes.py
  • mayan/apps/dynamic_search/tests/test_tasks.py
  • mayan/apps/dynamic_search/tests/test_views.py
  • mayan/apps/dynamic_search/urls.py
  • mayan/apps/dynamic_search/utils.py
  • mayan/apps/dynamic_search/view_mixins.py
  • mayan/apps/dynamic_search/views.py
  • mayan/apps/events/serializers.py
  • mayan/apps/linking/api_views.py
  • mayan/apps/metadata/tests/test_widgets.py
  • mayan/apps/permissions/api_views.py
  • mayan/apps/permissions/apps.py
  • mayan/apps/permissions/classes.py
  • mayan/apps/permissions/models.py
  • mayan/apps/permissions/serializers.py
  • mayan/apps/permissions/tests/mixins.py
  • mayan/apps/permissions/tests/test_api.py
  • mayan/apps/permissions/urls.py
  • mayan/apps/permissions/views.py
  • mayan/apps/rest_api/fields.py
  • mayan/apps/tags/tests/test_widgets.py

本文档介绍了 Mayan EDMS 的主要系统功能,重点涵盖动态搜索系统、安全架构以及支持大规模文档管理的高级特性。关于核心文档生命周期和处理流程的信息,请参见文档生命周期。关于部署和配置详情,请参见配置管理

动态搜索系统

Mayan EDMS 提供了一套可插拔的搜索架构,通过统一的接口支持多种搜索后端。该系统通过模型注册机制,支持对文档、元数据及相关对象的全文搜索。

搜索后端架构

搜索系统围绕 SearchBackend 类构建,为不同的搜索实现提供了通用接口:

Mayan EDMS · 搜索后端架构 · 图 1
Mayan EDMS · 搜索后端架构 · 图 1

来源: mayan/apps/dynamic_search/classes.py:38-509mayan/apps/dynamic_search/views.py:32-179mayan/apps/dynamic_search/api_views.py:13-103

搜索模型注册

SearchModel 类通过注册字段和定义搜索行为,使任何 Django 模型都可以被搜索:

组件用途关键方法
SearchModel定义可搜索的模型和字段add_model_field()get_search_fields()
SearchField表示单个可搜索字段get_model_field()get_help_text()
SearchBackend提供统一的搜索接口search()index_instance()deindex_instance()
Mayan EDMS · 搜索模型注册 · 图 2
Mayan EDMS · 搜索模型注册 · 图 2

来源: mayan/apps/dynamic_search/classes.py:564-862mayan/apps/dynamic_search/classes.py:510-563

搜索后端实现

Mayan EDMS 支持多种搜索后端,它们具有不同的性能特征:

  • Whoosh 后端:使用 Python Whoosh 库的基于文件的全文搜索
  • Django 后端:使用 Django ORM 查询的基于数据库的搜索
  • ElasticSearch 后端:使用 ElasticSearch 的分布式搜索

WhooshSearchBackend 提供了最先进的搜索能力:

Mayan EDMS · 搜索后端实现 · 图 3
Mayan EDMS · 搜索后端实现 · 图 3

来源: mayan/apps/dynamic_search/backends/whoosh.py:28-292mayan/apps/dynamic_search/backends/django.py:15-194

访问控制列表(ACL)系统

ACL 系统通过向特定对象的角色授予权限(而非系统范围的权限),提供了细粒度的访问控制。

ACL 架构
Mayan EDMS · ACL 架构 · 图 4
Mayan EDMS · ACL 架构 · 图 4

来源: mayan/apps/acls/models.py:22-121mayan/apps/acls/managers.py:26-383mayan/apps/acls/classes.py:17-208

ACL 权限过滤

AccessControlListManager 实现了复杂的权限过滤,能够处理继承关系和关联对象的权限:

过滤类型实现方式用途
直接对象content_type + object_id 查询直接授予对象的权限
关联字段外键遍历通过关联对象获得的权限
通用外键ct_fk_combination 注解内容类型 + 对象 ID 组合
继承递归字段遍历父对象权限继承
Mayan EDMS · ACL 权限过滤 · 图 5
Mayan EDMS · ACL 权限过滤 · 图 5

来源: mayan/apps/acls/managers.py:31-231mayan/apps/acls/managers.py:268-295

权限管理

权限系统提供了一种声明式的方法,使用命名空间和角色在应用程序中定义和管理权限。

权限类层次结构
Mayan EDMS · 权限类层次结构 · 图 6
Mayan EDMS · 权限类层次结构 · 图 6

来源: mayan/apps/permissions/classes.py:16-155mayan/apps/permissions/models.py:23-217

权限注册与检查

ModelPermission 类管理模型的权限注册,并提供继承机制:

# 权限注册示例
ModelPermission.register(
    model=Document,
    permissions=(permission_document_view, permission_document_edit)
)

# 权限继承设置
ModelPermission.register_inheritance(
    model=DocumentFile,
    related='document'
)
方法用途使用场景
register()为模型注册权限将权限链接到模型类
register_inheritance()设置权限继承子对象从父对象继承
get_for_class()获取模型权限检索适用的权限
check_user_permissions()验证用户访问权限权限检查逻辑

来源: mayan/apps/acls/classes.py:126-187mayan/apps/permissions/classes.py:65-74

高级功能集成

异步搜索索引

搜索系统使用 Celery 任务进行后台索引,以保持性能:

Mayan EDMS · 异步搜索索引 · 图 7
Mayan EDMS · 异步搜索索引 · 图 7

来源: mayan/apps/dynamic_search/tasks.py:22-166mayan/apps/dynamic_search/classes.py:86-146

多后端搜索支持

系统通过配置支持同时运行多个搜索后端:

后端使用场景配置方式
WhooshSearchBackend全文搜索,开发环境基于文件的索引
DjangoSearchBackend简单查询,小数据集仅数据库查询
ElasticSearchBackend大规模,分布式外部 ElasticSearch 集群
REST 接口集成

所有主要功能都通过一致的权限检查暴露 REST API 端点:

Mayan EDMS · REST 接口集成 · 图 8
Mayan EDMS · REST 接口集成 · 图 8

来源: mayan/apps/dynamic_search/api_views.py:13-103mayan/apps/acls/api_views.py:16-165mayan/apps/permissions/api_views.py:21-158