agentic_huge_data_base / wiki
页面 Mayan EDMS · 5.2 访问控制与权限·DeepWiki 中文全文译文

5.2 · 访问控制与权限(Access Control & Permissions)

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

项目Mayan EDMS 章节5.2 状态全文译文 模块系统架构、界面与交互、认证、权限与安全、文档对象与元数据
源码线索
  • 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/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/document_comments/urls.py
  • mayan/apps/events/serializers.py
  • mayan/apps/linking/api_views.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 EDMS 全面的访问控制和权限系统,该系统同时提供了系统级的基于角色的权限和细粒度的对象级访问控制列表(ACL)。该系统能够精确控制用户对文档、元数据、工作流以及平台中其他对象的访问。

关于用户和组管理的信息,请参见用户管理。关于 API 认证和授权机制,请参见REST API 架构

系统架构总览

Mayan EDMS 实现了一个三层权限系统,将基于角色的访问控制(RBAC)与对象级访问控制列表(ACL)相结合。该架构允许通过角色全局授予权限,也可以通过 ACL 针对单个对象授予特定权限。

Mayan EDMS · 系统架构总览 · 图 1
Mayan EDMS · 系统架构总览 · 图 1

来源:mayan/apps/permissions/classes.py:16-155, mayan/apps/acls/managers.py:26-295, mayan/apps/permissions/models.py:23-217

权限系统组件

权限类与命名空间

权限系统围绕组织在 PermissionNamespace 容器中的 Permission 对象构建。每个权限都有一个唯一的标识符,该标识符由命名空间和权限名称组合而成。

Mayan EDMS · 权限类与命名空间 · 图 2
Mayan EDMS · 权限类与命名空间 · 图 2

Permission 类提供运行时权限管理,而 StoredPermission 模型则将权限持久化到数据库中,用于角色分配和 ACL 条目。

来源:mayan/apps/permissions/classes.py:49-155, mayan/apps/permissions/models.py:142-217

模型权限注册

ModelPermission 类管理哪些权限适用于哪些 Django 模型,并处理相关模型之间的权限继承。

Mayan EDMS · 模型权限注册 · 图 3
Mayan EDMS · 模型权限注册 · 图 3

来源:mayan/apps/acls/classes.py:17-208

访问控制列表(ACL)

ACL 模型结构

AccessControlList 模型使用 Django 的通用外键机制,在角色、权限和特定对象之间建立关联。

Mayan EDMS · ACL 模型结构 · 图 4
Mayan EDMS · ACL 模型结构 · 图 4

每个 ACL 条目为特定对象授予角色特定的权限。用户通过其在角色中的组成员身份获得访问权限。

来源:mayan/apps/acls/models.py:22-116

ACL 权限检查逻辑

AccessControlListManager 通过两个主要方法实现核心的权限检查逻辑:

  • restrict_queryset() - 过滤查询集,仅包含用户可以访问的对象
  • check_access() - 验证用户是否对某个对象拥有特定权限
Mayan EDMS · ACL 权限检查逻辑 · 图 5
Mayan EDMS · ACL 权限检查逻辑 · 图 5

来源:mayan/apps/acls/managers.py:268-295, mayan/apps/acls/managers.py:233-267

基于角色的访问控制

角色模型与关系

Role 模型作为核心授权单元,包含组(组织单元)和权限。

Mayan EDMS · 角色模型与关系 · 图 6
Mayan EDMS · 角色模型与关系 · 图 6

角色可以通过两种方式授予权限:

  1. 系统级:直接为角色分配权限,影响所有对象
  2. 对象特定:通过针对单个对象的 ACL 条目

来源:mayan/apps/permissions/models.py:23-140

权限继承

ACL 系统支持权限继承,子对象可以通过外键关系从父对象继承权限。

Mayan EDMS · 权限继承 · 图 7
Mayan EDMS · 权限继承 · 图 7

来源:mayan/apps/acls/classes.py:193-203, mayan/apps/acls/managers.py:296-357

Web 界面与管理

角色管理视图

角色管理界面提供对角色的增删改查操作,以及角色与组和权限的关联管理。

Mayan EDMS · 角色管理视图 · 图 8
Mayan EDMS · 角色管理视图 · 图 8

来源:mayan/apps/permissions/views.py:50-211, mayan/apps/permissions/urls.py:16-52

ACL 管理视图

ACL 界面允许创建和管理对象特定的访问控制条目。

Mayan EDMS · ACL 管理视图 · 图 9
Mayan EDMS · ACL 管理视图 · 图 9

来源:mayan/apps/acls/views.py:30-278, mayan/apps/acls/urls.py:13-34

REST 接口集成

API 视图结构

权限和 ACL 系统提供了全面的 REST API,用于程序化访问管理。

Mayan EDMS · API 视图结构 · 图 10
Mayan EDMS · API 视图结构 · 图 10

来源:mayan/apps/permissions/api_views.py:21-178, mayan/apps/acls/api_views.py:16-169, mayan/apps/acls/urls.py:36-64

与文档系统的集成

文档权限模型

文档系统广泛使用 ACL 框架来控制对文档、文档类型、文件和版本的访问。

Mayan EDMS · 文档权限模型 · 图 11
Mayan EDMS · 文档权限模型 · 图 11

系统使用 register_inheritance() 确保在文档类型或文档级别授予的权限会自动应用于包含的文件、版本和页面。

来源:mayan/apps/acls/classes.py:126-187, mayan/apps/acls/managers.py:31-231