十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenProject 权限指南:项目权限与全局权限的完整解析

OpenProject 权限指南:项目权限与全局权限的完整解析 OpenProject 权限指南项目权限与全局权限的完整解析【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject本指南以 OpenProject 系统管理员手册中的 Permissions guide 为核心系统梳理 OpenProject 中全部权限项的含义、依赖关系与生效条件并结合仓库源码config/initializers/permissions.rb 与 lib/open_project/access_control.rb揭示权限定义与校验的底层机制。读完本文你将能准确理解每一个权限的实际作用正确配置项目角色与全局角色并避免因模块未启用或权限依赖缺失而导致的授权失效问题。权限模型概览在 OpenProject 中权限Permission决定了用户能看到什么与能做什么。权限本身并不直接分配给用户而是通过两类角色间接授予项目角色Project roles在具体项目内生效承载绝大多数业务权限查看/编辑工作包、管理成员、配置项目设置等全局角色Global roles在整个实例范围内生效用于跨项目的管理类操作。[!TIP] 部分权限只有在对应模块已在该项目启用时才有效。如果某个模块被禁用其关联权限会被直接忽略。从源码看这一机制由AccessControl.disable_modules_permissions(module_name)实现——当模块被禁用时会将其下所有权限标记为disabled并从有效权限集合中剔除见 lib/open_project/access_control.rb。权限定义统一登记在 config/initializers/permissions.rb 中每个权限声明包含对应的控制器动作controller actions、生效范围permissible_on如:project或:work_package、依赖权限dependencies、成员要求require以及用于数据层校验的contract_actions。项目权限Project permissions以下权限均作用于项目本身通常授予承担项目管理和配置职责的角色。Archive project归档项目允许用户归档和恢复取消归档一个项目。Edit project编辑项目允许用户进入项目设置并编辑项目配置。源码中该权限覆盖了projects/settings/general、projects/settings/storage、projects/settings/work_packages、projects/settings/template、projects/status等一批设置控制器动作并要求用户为项目成员见 config/initializers/permissions.rb。Select project modules选择项目模块允许用户启用或禁用项目模块对应projects/settings/modules控制器动作。View project attributes查看项目属性允许用户查看项目信息与属性依赖View project权限dependencies: :view_project。Export projects导出项目允许用户导出项目信息依赖View project权限。Edit project attributes编辑项目属性允许用户在项目概览页编辑项目属性依赖View project attributes。Select project attributes选择项目属性允许用户配置项目可用哪些属性即项目自定义字段的勾选。View project phases查看项目阶段允许用户查看项目生命周期阶段依赖View project见 config/initializers/permissions.rb。Edit project phases编辑项目阶段允许用户编辑项目生命周期阶段依赖View project phases。Select project phases选择项目阶段允许用户激活或停用项目阶段。停用的阶段会从项目概览和项目列表中隐藏对应projects/settings/life_cycle_steps控制器动作依赖Edit project phases见 config/initializers/permissions.rb。Manage members管理成员允许用户添加、移除项目成员并管理其角色。该权限覆盖members控制器的增删改查全套动作依赖View members见 config/initializers/permissions.rb。Invite members by email通过邮箱邀请成员允许用户通过邮箱邀请项目成员。这里的成员既包括 OpenProject 实例中的新用户也包括因当前 用户可见性设置 而对邀请者不可见的已有用户。[!NOTE] 该权限依赖 Manage members 权限源码中声明为dependencies: :manage_members见 config/initializers/permissions.rb单独授予无法生效。View members查看成员允许用户查看项目成员列表。Manage versions管理版本允许用户创建、编辑和删除项目版本。Select types选择类型允许用户配置项目中可用的工作包类型。Select custom fields选择自定义字段允许用户配置项目中可用的自定义字段。Create subprojects创建子项目允许用户创建子项目。Copy projects复制项目允许用户通过复制已有项目来创建新项目对于项目模板该权限也允许用户基于模板创建项目。[!NOTE] 用户复制项目时会在新项目中被授予配置中设定的New role for users that create projects创建项目的用户的新角色。根据配置不同该角色可能比用户在源项目中的角色拥有更多权限。此外要从项目设置中访问Copy操作用户通常还需要Edit project权限以打开项目设置另一种方式是直接基于项目模板创建新项目。Manage dashboards管理仪表盘允许用户创建和编辑项目仪表盘。Manage files in project管理项目中的文件允许用户管理项目文件存储。Automatically managed project folders: Read files自动管理项目文件夹读取文件允许用户读取自动管理项目文件夹中的文件。Automatically managed project folders: Write files自动管理项目文件夹写入文件允许用户修改自动管理项目文件夹中的文件。Automatically managed project folders: Create files自动管理项目文件夹创建文件允许用户在自动管理项目文件夹中创建文件。该权限仅适用于 Nextcloud 文件存储。Automatically managed project folders: Delete files自动管理项目文件夹删除文件允许用户删除自动管理项目文件夹中的文件。仅适用于 Nextcloud 文件存储。Automatically managed project folders: Share files自动管理项目文件夹共享文件允许用户共享自动管理项目文件夹中的文件。仅适用于 Nextcloud 文件存储。工作包与甘特图权限Work packages and Gantt chart工作包是 OpenProject 的核心数据对象因此这类权限数量最多、粒度和依赖也最细。多数动作型权限都声明了dependencies: :view_work_packages——即必须先拥有View work packages才能执行创建、编辑、删除等操作。View work packages查看工作包查看工作包的权限。它是整个工作包权限族的基础源码中覆盖work_packages、versions、journals以及work_packages_api等大量控制器动作并声明contract_actions: { work_packages: %i[read] }见 config/initializers/permissions.rb。Add work packages添加工作包创建工作包依赖View work packages。Edit work packages编辑工作包编辑工作包依赖View work packages。Move work packages移动工作包在项目之间移动工作包依赖View work packages。Duplicate work packages复制工作包复制克隆工作包依赖View work packages。Add comments添加评论在工作包上添加评论依赖View work packages。Edit own comments编辑自己的评论编辑本人创建的评论依赖View work packages。Moderate comments审核评论编辑任意用户创建的评论。[!IMPORTANT] 拥有该权限的用户可以编辑其他用户创建的评论需谨慎授予。View internal comments查看内部评论允许用户查看内部评论。内部评论Internal comments是 OpenProject 企业版Enterprise add-on功能只有拥有该权限的用户才能看到相关说明见 用户指南中的内部评论章节。Write internal comments编写内部评论允许用户创建内部评论依赖View internal comments。Edit own internal comments编辑自己的内部评论允许用户编辑本人创建的内部评论依赖View internal comments。Moderate internal comments审核内部评论允许用户编辑任意用户创建的内部评论。[!IMPORTANT] 拥有该权限的用户可以编辑其他用户创建的内部评论。Add attachments添加附件允许用户向工作包上传附件。[!NOTE] 该权限独立于 Edit work packages生效。源码注释明确说明WP attachments can be added with:edit_work_packages, this permission allows it without Edit WP as well见 config/initializers/permissions.rb。也就是说即使角色没有编辑权限也可以单独授予附件上传权限。Manage work package categories管理工作包类别允许用户创建、编辑和删除工作包类别。Export work packages导出工作包允许用户导出工作包依赖View work packages。Delete work packages删除工作包允许用户删除工作包依赖View work packages并要求为项目成员。Manage work package relations管理工作包关系允许用户创建、编辑和移除工作包关系。Manage work package hierarchies管理工作包层级允许用户管理工作包之间的父子关系对应源码中的manage_subtasks权限与work_package_hierarchy_relations控制器见 config/initializers/permissions.rb。Manage public views管理公共视图允许用户创建、编辑和删除公共工作包视图。该权限同时影响其他与工作包相关的公共视图例如 Team planner 和日历的公共视图。Save views保存视图允许用户保存个人工作包视图对应save_queries权限见 config/initializers/permissions.rb。View watchers list查看关注者列表允许用户查看谁在关注某个工作包。Add watchers添加关注者允许用户为工作包添加关注者。Delete watchers移除关注者允许用户移除工作包的关注者。Share work packages共享工作包允许用户与其他用户共享工作包。该权限依赖Edit work packages与View work package shares见 config/initializers/permissions.rb。View work package shares查看工作包共享允许用户查看已有的工作包共享对应contract_actions: { work_package_shares: %i[index] }。Assign versions分配版本允许用户为工作包分配版本。Change work package status更改工作包状态允许用户更改工作包状态。[!NOTE] 该权限独立于 Edit work packages生效。源码注释同样说明状态变更权限可以在不授予编辑权限的情况下单独授权见 config/initializers/permissions.rb。Become assignee/responsible成为负责人/责任人允许工作包被指派给在项目中拥有该角色的用户或用户组。[!NOTE] 这是一个被动权限。源码注释对此有精确定义A user having the permission isnt eligible to perform actions but rather to have actions taken together with him/her——即拥有该权限的用户不是去执行某个操作而是可以被选为工作包的负责人assignee或责任人responsible见 config/initializers/permissions.rb。并且该权限声明了grant_to_admin: false即管理员也不会自动获得被指派资格。View file links查看文件链接允许用户查看附加在工作包上的文件链接。Manage file links管理文件链接允许用户创建、编辑和移除文件链接。Manage wiki page links管理 Wiki 页面链接允许用户创建、编辑和移除 Wiki 页面链接。其他模块权限以下权限按功能模块划分均要求对应模块在项目中启用后才生效。Boards 看板View boards查看看板允许用户查看看板。Manage boards管理看板允许用户创建、编辑和删除看板。Backlogs 敏捷积压View sprints查看冲刺允许用户查看冲刺。Select backlog types and statuses选择积压类型与状态允许用户配置哪些工作包类型出现在积压中、哪些状态被视为已完成。Create sprints创建冲刺允许用户创建冲刺。Start/complete sprint开始/完成冲刺允许用户开始和完成冲刺。Manage sprint items管理冲刺条目允许用户管理冲刺内容。Share sprint共享冲刺允许用户共享冲刺信息。Budgets 预算View budgets查看预算允许用户查看项目预算。Edit budgets编辑预算允许用户创建、编辑和删除项目预算。Calendars 日历View calendars查看日历允许用户查看日历。Edit calendars编辑日历允许用户创建、编辑和删除日历。Subscribe to iCalendars订阅 iCalendar允许用户订阅日历订阅源。Documents 文档View documents查看文档允许用户查看项目文档。Manage documents管理文档允许用户创建、编辑和删除项目文档。Forums 论坛Manage forums管理论坛允许用户创建、编辑和删除论坛。Post messages发布消息允许用户在论坛发布消息。Edit messages编辑消息允许用户编辑任意论坛消息。Edit own messages编辑自己的消息允许用户编辑自己的论坛消息。Delete messages删除消息允许用户删除任意论坛消息。Delete own messages删除自己的消息允许用户删除自己的论坛消息。GitHub / GitLab 集成Show GitHub content显示 GitHub 内容允许用户查看 GitHub 集成内容。Show GitLab content显示 GitLab 内容允许用户查看 GitLab 集成内容。Meetings 会议View meetings查看会议允许用户查看会议。Create meetings创建会议允许用户创建会议。Edit meetings编辑会议允许用户编辑会议。Delete meetings删除会议允许用户删除会议。Send meeting invites and outcomes to participants向与会者发送会议邀请和结果允许用户向与会者发送会议邀请与会议结果。Manage agendas管理议程允许用户创建、编辑和删除议程项。Manage outcomes管理会议结果允许用户创建、编辑和删除会议结果。News 新闻Manage news管理新闻允许用户创建、编辑和删除新闻。Comment news评论新闻允许用户评论新闻。Team planner 团队规划器View team planner查看团队规划器允许用户查看 Team planner。Manage team planner管理团队规划器允许用户创建、编辑和配置 Team planner。Time and costs 工时与成本View spent time查看已记录工时允许用户查看所有已记录工时。View own spent time查看自己的工时允许用户查看自己的工时。Log own time记录自己的工时允许用户记录自己的工时。Log time for other users为其他用户记录工时允许用户代他人记录工时。Edit own time logs编辑自己的工时记录允许用户编辑自己的工时条目。Edit time logs for other users编辑其他用户的工时记录允许用户编辑其他用户创建的工时条目。Manage project activities管理项目活动允许用户创建、编辑和删除用于工时跟踪的项目活动。View own hourly rate查看自己的时薪允许用户查看自己的时薪。View all hourly rates查看所有时薪允许用户查看所有用户的时薪。Edit own hourly rates编辑自己的时薪允许用户编辑自己的时薪。Edit hourly rates编辑时薪允许用户编辑所有用户的时薪。View cost rates查看成本费率允许用户查看成本费率。Book unit costs for oneself为自己登记单位成本允许用户为自己登记单位成本。Book unit costs登记单位成本允许用户为其他用户登记单位成本。Edit own booked unit costs编辑自己登记的单位成本允许用户编辑自己登记的单位成本。Edit booked unit costs编辑已登记的单位成本允许用户编辑所有用户登记的单位成本。View booked costs查看已登记成本允许用户查看所有已登记成本。View own booked costs查看自己登记的成本允许用户查看自己登记的成本。Save public cost reports保存公共成本报表允许用户保存公共成本报表。Save private cost reports保存私有成本报表允许用户保存私有成本报表。WikiView wiki查看 Wiki允许用户查看 Wiki 页面。View wiki history查看 Wiki 历史允许用户查看 Wiki 页面的修订历史。Edit wiki pages编辑 Wiki 页面允许用户创建和编辑 Wiki 页面。Manage wiki管理 Wiki允许用户管理项目 Wiki包括重命名和删除 Wiki 页面。常见权限依赖关系部分权限之间存在隐含依赖或行为并不直观。官方文档将其汇总为下表务必在配置角色时核对权限附加说明Invite members by email需要Manage members权限。Copy projects用户在复制出的项目中被授予配置的New role for users that create projects角色。从项目设置访问Copy通常还需要Edit project权限。Add attachments可以独立于Edit work packages授予。Change work package status可以独立于Edit work packages授予。Become assignee/responsible控制用户或用户组能否被选为工作包的负责人assignee或责任人responsible。这些依赖关系并非仅停留在文档层面而是直接在源码中强制声明。以 config/initializers/permissions.rb 为例可以清晰看到dependencies字段的用法invite_members_by_email→dependencies: :manage_members第 L219-L223 行add_work_packages、edit_work_packages、delete_work_packages、move_work_packages→ 均依赖view_work_packagesview_project_phases→dependencies: :view_projectselect_project_phases→dependencies: :edit_project_phases形成查看 → 编辑 → 选择的递进链条第 L187-L207 行share_work_packages→dependencies: %i[edit_work_packages view_shared_work_packages]是一个多依赖示例第 L521-L527 行add_internal_comments→dependencies: %i[view_project view_internal_comments]第 L427-L432 行。源码视角权限是如何定义与校验的理解权限在源码中的存在形式有助于在配置时预判行为。1. 权限声明文件所有权限在 config/initializers/permissions.rb 中通过map.permission或模块内的wpt.permission声明。一个完整的权限声明包含以下关键属性控制器动作controller actions{ projects/settings/general: %i[show update] }之类的 Hash将权限绑定到具体的控制器与动作用于请求级的鉴权permissible_on权限的生效范围如:project、:work_package或:global。例如view_work_packages声明为permissible_on: %i[work_package project]意味着它在工作包级和项目级都能生效dependencies前置权限列表缺少前置权限则该权限无法独立起作用require访问门槛如:member必须为项目成员、:loggedin必须登录contract_actions映射到数据校验契约Contract的动作用于服务层/数据层的写入校验如work_packages: %i[read create update move copy]public/grant_to_admin标记公共权限或是否自动授予管理员。2. 权限注册与查询引擎lib/open_project/access_control.rb 是权限的运行时注册表与查询入口。它的核心职责包括map第 L34-L45 行收集初始化阶段声明的权限、模块与无权限模块并清空缓存permissions/project_permissions/global_permissions第 L57-L131 行按类型筛选出当前启用的权限集合区分项目权限与全局权限permission(action)第 L67-L75 行支持按权限名Symbol或按{controller:, action:}哈希反查权限是请求鉴权的基础allowed_actions/allow_actions第 L78-L87 行查询某权限允许的控制器动作disabled_project_modules/disable_modules_permissions第 L149-L205 行当模块被配置禁用时自动剔除其关联权限这正是模块未启用时相关权限被忽略这一文档提示的底层实现contract_actions_map第 L177-L189 行将权限映射为数据契约动作供写入校验使用。3. 角色与权限的关联权限最终通过角色Role授予用户项目角色包含一组项目权限全局角色包含一组全局权限。角色成员关系由Member/MemberRole模型承载见 app/models/member.rb 与 app/models/member_role.rb管理员在项目设置 → 成员或系统管理 → 角色与权限中为角色勾选权限即可完成授权。系统管理员还可以在系统管理 → 权限报告中按角色查看权限的授予概况相关截图与说明见 权限报告指南。配置实践建议结合文档提示与源码行为配置角色时应注意以下几点先启用模块再分配权限如果某模块如 Boards、Meeting、Wiki未在项目中启用其全部权限即使勾选也不会产生任何效果。可在项目设置 → 项目模块中调整。核对依赖链许多高级权限编辑阶段、选择阶段、邀请成员等依赖其前置权限。若用户明明有权限却无法操作优先检查依赖权限是否齐全。善用独立权限实现精细授权Add attachments与Change work package status都可以独立于Edit work packages授予适合允许上传附件/变更状态但不允许修改工作包其他内容的受限场景。留意被动权限Become assignee/responsible不赋予任何操作能力只决定该角色成员能否被指派为负责人/责任人且该权限不会自动授予管理员配置时容易遗漏。理解复制项目时的角色变化Copy projects会把用户以New role for users that create projects角色带入新项目复制场景下授予的权限可能超出源项目角色范围需在系统设置中确认该默认角色的权限集合。相关文档权限报告指南按角色查看权限授予情况角色与权限角色管理与全局角色用户可见性设置影响通过邮箱邀请成员权限的作用范围权限常见问题权限相关的常见问题解答权限定义源码config/initializers/permissions.rb权限注册与查询引擎lib/open_project/access_control.rb【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表