系统特性
系统功能
相关源文件
以下文件为本 Wiki 页面的生成提供了上下文:
docs/releases/4.1.9.txtmayan/apps/acls/api_views.pymayan/apps/acls/apps.pymayan/apps/acls/classes.pymayan/apps/acls/icons.pymayan/apps/acls/links.pymayan/apps/acls/managers.pymayan/apps/acls/models.pymayan/apps/acls/serializers.pymayan/apps/acls/tests/mixins.pymayan/apps/acls/tests/test_api.pymayan/apps/acls/tests/test_links.pymayan/apps/acls/tests/test_models.pymayan/apps/acls/tests/test_views.pymayan/apps/acls/urls.pymayan/apps/acls/views.pymayan/apps/cabinets/api_views.pymayan/apps/cabinets/tests/test_widgets.pymayan/apps/databases/literals.pymayan/apps/document_comments/urls.pymayan/apps/dynamic_search/api_views.pymayan/apps/dynamic_search/backends/django.pymayan/apps/dynamic_search/backends/whoosh.pymayan/apps/dynamic_search/classes.pymayan/apps/dynamic_search/filters.pymayan/apps/dynamic_search/literals.pymayan/apps/dynamic_search/management/commands/search_index_objects.pymayan/apps/dynamic_search/queues.pymayan/apps/dynamic_search/serializers.pymayan/apps/dynamic_search/tasks.pymayan/apps/dynamic_search/templates/dynamic_search/app/list_toolbar.htmlmayan/apps/dynamic_search/templates/dynamic_search/search_box.htmlmayan/apps/dynamic_search/tests/backends.pymayan/apps/dynamic_search/tests/mixins.pymayan/apps/dynamic_search/tests/test_backends.pymayan/apps/dynamic_search/tests/test_classes.pymayan/apps/dynamic_search/tests/test_tasks.pymayan/apps/dynamic_search/tests/test_views.pymayan/apps/dynamic_search/urls.pymayan/apps/dynamic_search/utils.pymayan/apps/dynamic_search/view_mixins.pymayan/apps/dynamic_search/views.pymayan/apps/events/serializers.pymayan/apps/linking/api_views.pymayan/apps/metadata/tests/test_widgets.pymayan/apps/permissions/api_views.pymayan/apps/permissions/apps.pymayan/apps/permissions/classes.pymayan/apps/permissions/models.pymayan/apps/permissions/serializers.pymayan/apps/permissions/tests/mixins.pymayan/apps/permissions/tests/test_api.pymayan/apps/permissions/urls.pymayan/apps/permissions/views.pymayan/apps/rest_api/fields.pymayan/apps/tags/tests/test_widgets.py
本文档介绍了 Mayan EDMS 的主要系统功能,重点涵盖动态搜索系统、安全架构以及支持大规模文档管理的高级特性。关于核心文档生命周期和处理流程的信息,请参见文档生命周期。关于部署和配置详情,请参见配置管理。
动态搜索系统
Mayan EDMS 提供了一套可插拔的搜索架构,通过统一的接口支持多种搜索后端。该系统通过模型注册机制,支持对文档、元数据及相关对象的全文搜索。
搜索后端架构
搜索系统围绕 SearchBackend 类构建,为不同的搜索实现提供了通用接口:
来源: mayan/apps/dynamic_search/classes.py:38-509,mayan/apps/dynamic_search/views.py:32-179,mayan/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/apps/dynamic_search/classes.py:564-862,mayan/apps/dynamic_search/classes.py:510-563
搜索后端实现
Mayan EDMS 支持多种搜索后端,它们具有不同的性能特征:
- Whoosh 后端:使用 Python Whoosh 库的基于文件的全文搜索
- Django 后端:使用 Django ORM 查询的基于数据库的搜索
- ElasticSearch 后端:使用 ElasticSearch 的分布式搜索
WhooshSearchBackend 提供了最先进的搜索能力:
来源: mayan/apps/dynamic_search/backends/whoosh.py:28-292,mayan/apps/dynamic_search/backends/django.py:15-194
访问控制列表(ACL)系统
ACL 系统通过向特定对象的角色授予权限(而非系统范围的权限),提供了细粒度的访问控制。
ACL 架构
来源: mayan/apps/acls/models.py:22-121,mayan/apps/acls/managers.py:26-383,mayan/apps/acls/classes.py:17-208
ACL 权限过滤
AccessControlListManager 实现了复杂的权限过滤,能够处理继承关系和关联对象的权限:
| 过滤类型 | 实现方式 | 用途 |
|---|---|---|
| 直接对象 | content_type + object_id 查询 | 直接授予对象的权限 |
| 关联字段 | 外键遍历 | 通过关联对象获得的权限 |
| 通用外键 | ct_fk_combination 注解 | 内容类型 + 对象 ID 组合 |
| 继承 | 递归字段遍历 | 父对象权限继承 |
来源: mayan/apps/acls/managers.py:31-231,mayan/apps/acls/managers.py:268-295
权限管理
权限系统提供了一种声明式的方法,使用命名空间和角色在应用程序中定义和管理权限。
权限类层次结构
来源: mayan/apps/permissions/classes.py:16-155,mayan/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-187,mayan/apps/permissions/classes.py:65-74
高级功能集成
异步搜索索引
搜索系统使用 Celery 任务进行后台索引,以保持性能:
来源: mayan/apps/dynamic_search/tasks.py:22-166,mayan/apps/dynamic_search/classes.py:86-146
多后端搜索支持
系统通过配置支持同时运行多个搜索后端:
| 后端 | 使用场景 | 配置方式 |
|---|---|---|
WhooshSearchBackend | 全文搜索,开发环境 | 基于文件的索引 |
DjangoSearchBackend | 简单查询,小数据集 | 仅数据库查询 |
ElasticSearchBackend | 大规模,分布式 | 外部 ElasticSearch 集群 |
REST 接口集成
所有主要功能都通过一致的权限检查暴露 REST API 端点:
来源: mayan/apps/dynamic_search/api_views.py:13-103,mayan/apps/acls/api_views.py:16-165,mayan/apps/permissions/api_views.py:21-158