资讯动态

OpenProject 项目成员管理完全指南:添加、编辑、移除成员与共享权限撤销

发布时间:2026/9/18 5:06:25 来源:尧图企业网站定制
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 中Members成员模块的完整使用方法涵盖项目成员概览、添加/邀请成员、编辑角色、移除成员、撤销工作包共享权限、角色与权限配置以及用户组Groups协作等全部核心操作。读完本文你将掌握在 OpenProject 中高效管理项目参与者的完整实战方案并理解底层用户可见性visibility规则与成员增删的服务层实现原理从而能够针对实际项目场景正确配置成员、角色与访问权限。项目成员概览Project members overview在项目的左侧菜单中可以看到Members成员入口。选中后系统会展示该项目下三类参与者的完整列表项目成员project members——被明确添加到项目中的用户或占位用户项目用户组project groups——被添加到项目中的用户组工作包共享用户users with whom work packages from this project have been shared——未加入项目、但被共享了该项目工作包的用户。对于列表中的每一行都可以通过行尾的图标对用户或用户组执行编辑edit或删除delete操作。[!IMPORTANT] 如果你没有全局权限View all users and groups查看所有用户和用户组你可能无法看到全部项目成员。可见范围会被限制为与你共享某个项目的用户或与你处于同一用户组中的用户。这与下文 用户可见性 一节描述的底层规则一致——后端在查询成员列表时即通过Member.visible(User.current)进行可见性过滤见 member_query.rb。左侧菜单标准过滤器成员模块左侧菜单提供以下标准过滤器All全部——返回项目的所有成员和用户组以及与该项目一个或多个工作包存在共享关系的非成员用户。Locked已锁定——返回属于该项目成员的已锁定用户以及与该项目工作包存在共享关系的已锁定非成员。Invited已邀请——返回所有已收到邀请但尚未注册的用户。Project roles项目角色——基于该项目中已分配给用户的成员角色提供过滤。Work package shares工作包共享——基于工作包共享可用的角色提供过滤具体包括All shares全部共享——返回该项目中所有被共享了工作包的用户View查看——返回所有只能查看、不能编辑或评论被共享工作包的用户Comment评论——返回所有允许对被共享工作包添加评论的用户Edit编辑——返回所有允许编辑被共享工作包的用户。Groups用户组——列出所有已添加到该项目的用户组仅当项目已添加用户组时该过滤器才可见。[!NOTE] 对于仅被共享了工作包而非项目成员的用户不能在Members模块中直接编辑或删除。如需调整或撤销其查看权限可以点击该用户行中 Shared 列显示的工作包数量例如上图中的 3 个工作包系统会打开一个已按该用户过滤的工作包列表展示所有共享给该用户的工作包。另一种方式是进入Work packages工作包模块使用Shared with users与用户共享过滤器筛选后相应调整权限详见 共享工作包 中的移除共享权限部分。[!NOTE] 作为用户组成员的用户也会被单独显示在成员列表中。此时你只能编辑分配给该用户的角色而不能删除该用户。如果需要删除一个属于用户组且该组也已加入项目的用户只能先删除整个用户组再按需将组内成员逐个添加回项目。使用 Filter 按钮细化成员列表点击模块名称下方左侧的Filter过滤器按钮可以进一步调整显示的成员。完成筛选条件设置后点击绿色的Apply应用按钮生效。成员概览支持以下过滤条件Status状态——按用户状态过滤例如 active活跃、invited已邀请、locked已锁定或 registered已注册。从源码看状态计数由 user_filter_component.rb 中的extra_user_status_options提供覆盖all / blocked / active / invited / registered / locked六种状态并基于Members::UserFilterComponent的过滤查询实时统计数量。Group用户组——按是否属于某个已有用户组过滤实例中所有可用用户组都会列为选项即使该用户组本身尚未被添加到当前项目。源码中对应filter_group通过group_hierarchy过滤条件实现。Role角色——基于该项目中已分配给用户的所有角色过滤选项与左侧菜单中的 Project roles 一致。Work package shares工作包共享——提供与左侧菜单相同的过滤选项全部共享、查看、评论、编辑。底层通过shared_role_id参数与内置共享角色工作包查看者 / 评论者 / 编辑者实现见 user_filter_component.rb 中的share_options与filter_shares。Name名称——通过输入用户或用户组名称进行搜索。用户可见性Visibility of users并非每个用户都能看到 OpenProject 中的其他用户或用户组。当你选择成员、使用过滤器或搜索人员时结果列表会被限制为对当前用户可见的用户和用户组。在以下任一条件成立时你可以看到另一个用户或用户组你是管理员administrator——管理员可以看到所有用户和用户组。你拥有全局权限 View all users and groups查看所有用户和用户组——无需成为管理员即可获得同等完整的可见性。你们在同一用户组中——如果你与另一个用户属于共同用户组无论是否有共享项目你们都可以互相看到对方。你们共享一个项目——如果你们都是同一项目的成员则可以互相看到。这也涵盖未加入项目、但被共享了该项目中工作包的用户详见 共享工作包。你可以访问对方所属的项目——当项目为public公开项目、你是其成员、或该项目中有工作包共享给你时该项目对你可访问。在这几种情况下你可以看到该项目的所有成员以及所有在该项目中被共享了工作包的用户。需要特别留意以下几点公开项目的成员对所有人可见因为公开项目对所有用户都可访问。可见性是按项目评估的而不是按工作包评估。一旦你能看到某个项目就能看到它的所有成员而不仅仅是被共享给你那个工作包所涉及的人员。能看到用户并不代表对其数据有任何额外权限它只决定该用户是否出现在成员列表、过滤器和用户搜索中。[!NOTE] 如果你没有全局权限View all users and groups某些通过其他途径例如通过你并不所属的用户组加入项目的成员可能不会显示给你即使他们确实参与了这个项目。从源码层面看这一规则体现在多个位置成员索引查询使用Member.visible(User.current)作为默认作用域member_query.rb添加成员时的自动补全通过Principal.visible.possible_member(project, type:).like(...)限定可选对象members_controller.rb 中的possible_members而成员删除操作同样先经Principal.visible.find(params[:principal_id])校验可见性。添加成员Add members添加成员分为两种场景详见快速上手指南添加已有用户到项目参考 invite-members 指南中的 Add existing users 部分邀请新用户加入项目参考 invite-members 指南中的 Invite new members 部分。在成员添加表单中可以通过用户名或邮箱搜索已有用户如果当前用户拥有邀请权限且输入的文本符合邮箱格式源码中使用正则/\A\S\S\.\S\z/匹配见 members_controller.rb 的suggest_invite_via_email?系统会额外提示Invite by mail通过邮件邀请选项。提交后后端经由Members::CreateService逐个创建成员记录并为每个成员分配所选角色全部成功时会提示 member added/members added 类别的成功消息见members_added_notice。编辑成员Edit members当需要变更某位成员在项目内的角色时按以下步骤操作选择对应的项目打开Members成员模块在成员列表中点击目标成员右侧的More更多图标选择Manage roles管理角色添加或移除角色点击绿色的Change更改按钮保存修改。从后端实现看该操作由Members::UpdateService配合permitted_params.member完成见 members_controller.rb 的update动作更新成功后会提示notice_successful_update并重定向回成员列表。移除成员Remove members要从项目中移除成员操作路径为打开需要移除成员的项目在左侧项目菜单中选择Members成员模块在成员列表中点击目标成员所在行右端的More更多图标选择Remove member移除成员。系统会要求你确认该决定。需要特别注意以下行为[!NOTE] 一个项目成员可以单独加入项目、作为用户组成员加入项目或两者兼有。移除操作只会影响该成员的个人角色通过用户组获得的角色不会被移除。如需移除这些组角色可以将该成员从用户组中移出或将整个用户组从项目中移除。如果被移除的成员同时属于某个也是项目成员的用户组系统会提示你该用户将保留作为用户组成员的项目访问权限。如果被移除的成员还共享了工作包系统会询问是否同时移除这些共享权限。[!IMPORTANT] 请谨记只有拥有正确权限的用户才能移除项目成员。从源码看移除成员由destroy_by_principal动作触发核心逻辑在 delete_by_principal_service.rb 的Members::DeleteByPrincipalService中当确认移除项目成员身份时调用Members::DeleteService删除项目成员记录delete_project_member当选择同时移除工作包共享时若参数为all则遍历该用户在本项目中的所有工作包共享并调用Shares::DeleteService删除若指定了具体角色 IDwork_package_shares_role_id则调用Shares::DeleteRoleService仅移除对应角色类型的共享权限工作包共享的查找限定为Member.of_anything_in_project(project).of_any_work_package.where(principal:).without_inherited_roles即不涉及通过用户组继承的角色——这与文档中撤销操作只影响个人共享、不影响用户组共享的说明完全吻合。撤销共享权限Revoke sharing privileges如果某个工作包已被 共享在项目后期可能需要撤销共享权限。操作方式在成员列表中点击目标成员所在行右端的More更多图标选择Revoke work package shares撤销工作包共享即可撤销该用户的工作包共享权限也可以选择View shared work packages查看已共享的工作包来查看与该用户共享的所有工作包列表。[!NOTE] 项目成员既可以单独加入项目也可以作为用户组成员加入项目或两者兼有。撤销操作只会影响个人的工作包共享通过用户组获得的共享不会被撤销。如需撤销用户组的共享可以将该成员移出用户组或直接撤销整个用户组的权限。角色与权限Roles and permissions成员在项目中拥有不同角色不同角色具备不同权限。角色与权限的具体配置方法参见系统管理指南中的 角色与权限Roles and permissions 章节。角色role被定义为一组由唯一名称标识的权限集合。将项目成员分配到项目时通过指定用户、用户组或占位用户的名称以及他们在项目中应承担的角色来实现。要把工作包分配给某位项目成员该用户或占位用户的角色必须具备被分配工作包的权限。默认角色default roles默认即具备该能力。你可以在系统管理Administration的 角色与权限Roles and permissions 区域检查这一设置。补充说明除了传统项目角色之外工作包共享使用另一组独立的内置共享角色。从 user_filter_component.rb 的源码可以看到共享角色共三个工作包查看者BUILTIN_WORK_PACKAGE_VIEWER、工作包评论者BUILTIN_WORK_PACKAGE_COMMENTER和工作包编辑者BUILTIN_WORK_PACKAGE_EDITOR分别对应成员列表过滤器中 View / Comment / Edit 三个共享选项。用户组Groups用户可以被添加到**用户组group**中用户组可以被添加到项目里。这样一来用户组内的所有用户都会在该项目中获得对应的角色从而极大地简化了批量授权与管理流程。关于如何在 OpenProject 中创建和管理用户组参见系统管理指南中的 用户组Groups 章节。在实际项目中用户组的典型用法是先按部门、团队或职能建立用户组再将用户组整体加入项目并分配角色。需要调整权限时只需修改用户组成员或用户组角色即可一次性影响组内所有成员而不必逐个操作。需要注意的是如前文所述用户组成员在项目成员列表中仍会单独显示便于单独查看每个成员的归属与角色明细。从源码理解成员模块的完整链路为了便于深入理解这里将成员模块的完整调用链做一个总结均为当前仓库中的真实实现环节实现位置说明成员列表索引members_controller.rbindex/set_index_data!组装成员查询、表格选项与过滤器选项成员过滤查询member_query.rbQueries::Members::MemberQuery以Member.visible(User.current)为默认作用域预加载 roles、principal 与 member_roles过滤器组件user_filter_component.rbMembers::UserFilterComponent提供状态计数、用户组过滤、共享角色过滤shared_role_id添加成员Members::CreateService由 members_controller.rbcreate调用逐个创建成员并分配角色编辑角色Members::UpdateServiceupdate动作调用更新成员的角色集合移除成员delete_by_principal_service.rbMembers::DeleteByPrincipalService同时处理项目成员删除与工作包共享删除/降权这套结构清晰地体现了 OpenProject 控制器 → 服务层Service→ 模型/查询 的典型架构界面上的每次成员操作最终都收敛到对应的 Service 中执行并通过ServiceResult返回成功或错误信息从而保证了权限校验、事务与业务规则的统一。小结成员管理是 OpenProject 项目协作的基础能力。通过Members 模块你可以一目了然地掌握项目的全部参与者项目成员、用户组、工作包共享用户借助状态、用户组、角色与共享过滤器快速定位目标通过Manage roles灵活调整成员角色通过Remove member安全地移除成员同时决定是否连带撤销其工作包共享通过Revoke work package shares随时收紧共享范围。理解用户可见性规则与用户组继承特性可以避免为什么我看不到某些成员为什么删除了用户他还有权限等常见困惑从而更准确、更安全地管理项目访问权限。【免费下载链接】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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价