常州微信网站建设效果,登别的网站应怎么做,海南高端网站建设,响水做网站价格背景
前段时间#xff0c;因内部使用的 Gitlab 版本存在漏洞#xff0c;需要进行升级#xff0c;于是乎#xff0c;将 Gitlab 从 16.6.0 升级到 16.11.3。而我们项目有个接口是用于获取 Gitlab 上的开发人员。
然后#xff0c;今天#xff0c;突然发现这个接口获取不到…背景
前段时间因内部使用的 Gitlab 版本存在漏洞需要进行升级于是乎将 Gitlab 从 16.6.0 升级到 16.11.3。而我们项目有个接口是用于获取 Gitlab 上的开发人员。
然后今天突然发现这个接口获取不到 Gitlab 上任何成员响应空数组也没有报错信息。如下
分析 首先是查看 Gitlab 是否正常人员配置信息是否存在排查之后发现都是正常的。 询问其他人最近是否有修改过 Gitlab 相关配置貌似没有 上网搜索相关信息无果…… 是否是因为升级了 Gitlab 导致的时间恰好能对上那就看下官方文档 文档地址分组和项目成员 API
官方文档
首先看到的是 List all members of a group or project列出组或项目的所有成员
API 如下
GET /groups/:id/members
GET /projects/:id/members我们项目用的确实是这个 API上面也说了是所有成员那怎么就响应了空数组呢再细看标题下面的介绍 Gets a list of group or project members viewable by the authenticated user. Returns only direct members and not inherited members through ancestors groups. 获取已认证的用户并有权限查看的组或项目成员列表但只返回直接成员不返回通过祖先组类似 Java 的父类继承的成员。 啥啥意思啥是直接成员说好的所有成员怎么就只返回直接成员 在 Gitlab 中可以创建组组中可以创建多个子组子组可以创建多个项目。
以下是关于 Gitlab 中成员类型的介绍
成员类型成员描述直接成员直接被添加到当前的群组或项目中的用户间接成员通过继承父群组的成员或通过邀请加入其他群组或项目的用户继承成员如果一个群组是另一个父群组的子群组父群组的成员也会成为子群组的用户共享成员通过邀请的方式加入到当前群组或项目或其祖先组的用户继承共享成员被邀请到当前群组或项目的父群组或项目的用户
假如你创建了A组并在A组创建了test项目然后将小一同学添加到了A组那么小一同学就是A组的直接成员而test项目也有小一同学这个成员只不过他是继承过来的所以不属于test项目的直接成员。
那么要如何获取到这个项目真正的所有成员呢 根据文档往下看看到 List all members of a group or project including inherited and invited members列出组或项目的所有成员包括继承成员和邀请成员看着是有那么点像我们要的了
API 如下
GET /groups/:id/members/all
GET /projects/:id/members/all经过一试确实可以
来具体看下介绍 Gets a list of group or project members viewable by the authenticated user, including inherited members, invited users, and permissions through ancestor groups. 获取已认证的用户并有权限查看的组或项目成员列表包括通过祖先组继承的成员、受邀用户以及权限。 If a user is a member of this group or project and also of one or more ancestor groups, only its membership with the highest access_level is returned. This represents the effective permission of the user. 如果用户是这个组或项目的成员同时也是一个或多个祖先组的成员那么只会返回其拥有最高 access_level 访问权限表示该用户的有效权限。 Members from an invited group are returned if either: The invited group is public.The requester is also a member of the invited group.The requester is a member of the shared group or project. 如果满足以下条件之一则会返回受邀组的成员 受邀组是公开的请求者也是受邀组的成员请求者是共享组或项目的成员 看来确实得用这个 API 才能后真正获取到分组或项目中所有的成员。 查看了其它版本的文档也有这两个接口那也许不是因为版本差异导致的可能是配置静待后续…… 经过回溯原来的测试记录后发现当时测试的项目的成员是直接加进去也就是属于直接成员所以就没有问题而 Gitlab 中绝大多数成员都是直接添加到 Group 中的因此通过 /members 就获取不到了 说到底还是测试做得不够好 webui_members_inherited_users
webui_members_inherited_users 是一个功能标志用于控制是否在成员页面中显示被邀请的群组成员。在 GitLab 16.10 中引入此功能并默认禁用。
之所以引入这个是因为在 GitLab 13.1 版本中引入了允许群组与其他群组共享。但是当使用群组成员 API 时无法获取那些被邀请的群组成员可能影响到用户在管理项目和群组成员时的体验和效率。 具体见https://gitlab.com/gitlab-org/gitlab/-/issues/219230
关于该功能标志的相关配置 登录 Gitlab 所在的服务器 启动 Rails 控制台 sudo gitlab-rails console在控制台中查询当前的标志状态或更改 # 查询当前状态
Feature.enabled?(:webui_members_inherited_users)# 启用功能标志
Feature.enable(:webui_members_inherited_users)# 禁用功能标志
Feature.disable(:webui_members_inherited_users)退出控制台 exit