当前位置: 首页 > news >正文

【Gitlab】记一次升级 Gitlab 后 API 失效的问题

背景

前段时间,因内部使用的 Gitlab 版本存在漏洞,需要进行升级,于是乎,将 Gitlab 从 16.6.0 升级到 16.11.3。而我们项目有个接口是用于获取 Gitlab 上的开发人员。

然后,今天,突然发现这个接口获取不到 Gitlab 上任何成员(响应空数组),也没有报错信息。如下:
在这里插入图片描述

分析

  1. 首先是查看 Gitlab 是否正常,人员配置信息是否存在,排查之后发现都是正常的。

  2. 询问其他人最近是否有修改过 Gitlab 相关配置,貌似没有???

  3. 上网搜索相关信息,无果……

  4. 是否是因为升级了 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

关于该功能标志的相关配置:

  1. 登录 Gitlab 所在的服务器

  2. 启动 Rails 控制台

    sudo gitlab-rails console
    
  3. 在控制台中,查询当前的标志状态或更改

    # 查询当前状态
    Feature.enabled?(:webui_members_inherited_users)# 启用功能标志
    Feature.enable(:webui_members_inherited_users)# 禁用功能标志
    Feature.disable(:webui_members_inherited_users)
    
  4. 退出控制台

    exit
    

相关文章:

【Gitlab】记一次升级 Gitlab 后 API 失效的问题

背景 前段时间,因内部使用的 Gitlab 版本存在漏洞,需要进行升级,于是乎,将 Gitlab 从 16.6.0 升级到 16.11.3。而我们项目有个接口是用于获取 Gitlab 上的开发人员。 然后,今天,突然发现这个接口获取不到…...

2024.7.19 作业

1.链表的排序 int list_sort(NodePtr L) {if(NULLL || L->len<1){printf("排序失败");return -1;}int lenL->len1;NodePtr p;int i,j;for( i1;i<len;i){for( j0,pL;j<len-i;j,pp->next){if( p->data > p->next->data ){datatype tp-&…...

python如何创建SQLite 数据库连接,如何将数据库存储在内存中?

嗨&#xff0c;大家好&#xff0c;我是兰若姐姐。今天给大家说下如何创建SQLite 数据库连接,并将数据库存储在内存中,这是一种临时的、私有的数据存储空间&#xff0c;一般用于以下情形&#xff1a; 什么都不说&#xff0c;先上代码&#xff1a; import sqlite3创建数据库连接…...

机器学习-20-基于交互式web应用框架streamlit的基础使用教程

参考简洁而优雅地展示你的算法和数据——streamlit教程(一) 原理介绍与布局控制 参考Streamlit 讲解专栏(二):搭建第一个应用 Streamlit 讲解专栏(三):两种方案构建多页面 Streamlit 讲解专栏(五):探索强大而灵活的 st.write() 函数 1 streamlit 1.1 运行原理 im…...

基于luckysheet实现在线电子表格和Excel在线预览

概述 本文基于luckysheet实现在线的电子表格&#xff0c;并基于luckyexcel实现excel文件的导入和在线预览。 效果 实现 1. luckysheet介绍 Luckysheet &#xff0c;一款纯前端类似excel的在线表格&#xff0c;功能强大、配置简单、完全开源。 官方文档在线Demo 2. 实现 …...

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(一)-3GPP TS 23.256 技术规范概述

3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及A2X&#xff08;Aircraft-to-Everything&#xff09;服务的支持。 3GPP TS 23.256 技术规范&#xff1a; 以下是文档的核心内容总结&#xff1a; UAV系…...

sqlalchemy_dm

1、参考文档&#xff1a; https://blog.csdn.net/njcwwddcz/article/details/126554118 https://eco.dameng.com/document/dm/zh-cn/pm/dmpython-dialect-package.html 2、生成工具 sqlalchemy2.0.0.zip 3、安装步骤 conda create --name kes --clone kes1 rz unzip sql…...

基于springboot+vue+uniapp的驾校预约平台小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…...

echarts实现3d柱状效果

代码如下&#xff0c;单个的调第一个方法&#xff0c;多个柱状的调第二个方法&#xff0c;具体情况修改参数或者二次开发即可 //3d柱状图 export function getEcharts3DBar (xAxisData:string[][name1,name2,name3], data:number[][1,2,3], colorObj:IBaseObject{topStartColo…...

Flask校验

WTForms 是一个 Python 库&#xff0c;用于处理和验证 Web 表单。它提供了很多功能来简化表单处理&#xff0c;包括字段类型、验证器、错误消息等。在 WTForms 中&#xff0c;validate 机制是用于确保表单数据满足特定条件的关键部分。 1.验证器&#xff08;Validators&#x…...

web前端 Vue 框架面试120题(一)

面试题 1 . 简述Vue的MVVM 模式? 参考回答&#xff1a; MVVM 是 Model-View-ViewModel的缩写&#xff0c;即将数据模型与数据表现层通过数据驱动进行分离&#xff0c;从而只需要关系数据模型的开发&#xff0c;而不需要考虑页面的表现&#xff0c;具体说来如下&#xff1a;M…...

UniApp__微信小程序项目实战 实现长列表分页,通过 onReachBottom 方法上划分次加载数据

UniApp 实现长列表分页&#xff0c;通过 onReachBottom 方法上划分次加载数据 项目实战中比较常见&#xff0c;方便下次使用 文章目录 一、应用场景? 二、作用 三、使用步骤&#xff1f;          3.1 实现的整体思路&#xff1f;    …...

数据结构(功能受限的表-栈队列)

功能受限的表结构 一、栈和队列介绍 栈和队列是两种重要的线性结构&#xff0c;从数据结构角度&#xff0c;他们都是线性表&#xff0c;特殊点在于它们的操作被限制&#xff0c;也就是所谓的功能受限&#xff0c;统称功能受限的线性表 从数据类型角度&#xff0c;它们也可以是…...

高数知识补充----矩阵、行列式、数学符号

矩阵计算 参考链接&#xff1a;矩阵如何运算&#xff1f;——线性代数_矩阵计算-CSDN博客 行列式计算 参考链接&#xff1a;实用的行列式计算方法 —— 线性代数&#xff08;det&#xff09;_det线性代数-CSDN博客 参考链接&#xff1a;行列式的计算方法(含四种&#xff0c;…...

《Techporters架构搭建》-Day01 第一个RESTful API接口

微服务架构搭建 搭建微服务架构分析一下项目的build.gradle添加Demo接口 搭建微服务架构 首先搭建系统管理模块&#xff0c;模块结构如下 tps-cloud └── tps-system -- 系统管理模块└── tps-system-api -- 系统管理模块公共api模块└── tps-system-biz -- 系统管理模…...

【C++ —— AVL树】

C —— AVL树 AVL树的概念AVL树节点的定义AVL树的插入向上调整旋转左单旋右单旋左右双旋右左双旋 AVL树的高度AVL树的验证总结&#xff1a;代码 AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素…...

跨平台webSocket模块设计技术解决方案

1. 概述 目标&#xff1a;设计并实现一个能够在多种操作系统上运行的WebSocket通讯模块&#xff0c;支持与前端浏览器和HTTPS服务端进行数据交换。技术栈&#xff1a;C11 &#xff0c;使用跨平台库如 Boost处理网络IO&#xff0c;使用 JSON 库如 nlohmann/json 解析消息。 2.…...

Drools规则引擎

一、Drools规则引擎 Drools官网&#xff1a; https://www.drools.org/Drools中文网: http://www.drools.org.cn/bilibili学习视频(黑马博学谷2020年最新Java项目Drools业务规则管理系统&#xff08;BRMS&#xff09;)&#xff1a; https://www.bilibili.com/video/BV1Pa4y1a7u…...

vue学习day11-路由、路由模块的封装、声明式导航-路由的介绍、VueRouter、router-link、自定义高亮类名

32、路由 &#xff08;1&#xff09;路由的介绍 1&#xff09;生活中的路由&#xff1a;设备和ip的映射关系 2&#xff09;路由&#xff1a;一种映射关系 3&#xff09;Vue中的路由&#xff1a;路径与组件的映射关系 &#xff08;根据路由就能知道不同的路径&#xff0c;应…...

智慧校园学期基础数据管理

在智慧校园基础数据管理之一的学期管理功能管理中&#xff0c;学期的有序管理具有重要意义。它不仅是教学活动有序开展的指挥棒&#xff0c;更是连接学校管理者、教师与学生之间沟通的桥梁&#xff0c;承载着规划、跟踪与管理学期内各项事务的重要使命。 学期管理功能的首要任务…...

BilibiliDown:你的专属B站视频管家,轻松下载与管理海量内容

BilibiliDown&#xff1a;你的专属B站视频管家&#xff0c;轻松下载与管理海量内容 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.…...

智能客服架构图实战:从高并发设计到生产环境部署

今天想和大家聊聊智能客服系统的架构实战。我们团队最近刚把一个老的单体客服系统重构为微服务架构&#xff0c;主要就是为了应对大促期间的高并发访问。整个过程踩了不少坑&#xff0c;也积累了一些经验&#xff0c;在这里做个梳理和分享。 先说说我们遇到的痛点。原来的系统&…...

KIHU快狐|LCD触摸屏壁挂式酒店信息展示终端

在现代酒店管理中&#xff0c;信息展示终端扮演着至关重要的角色。KIHU快狐的LCD触摸屏壁挂式酒店信息展示终端&#xff0c;凭借其先进的技术和卓越的性能&#xff0c;成为酒店行业的理想选择。高效的信息展示KIHU快狐的LCD触摸屏壁挂式酒店信息展示终端&#xff0c;采用高分辨…...

告别繁琐配置:用快马一键生成wsl2环境初始化脚本

告别繁琐配置&#xff1a;用快马一键生成wsl2环境初始化脚本 最近在帮团队新成员配置开发环境时&#xff0c;发现每次手动搭建wsl2都要重复查找各种命令和配置步骤&#xff0c;效率实在太低。于是尝试用InsCode(快马)平台生成了一套自动化脚本&#xff0c;效果出乎意料地好。 …...

从零开始:使用Python Add-in快速构建ArcGIS自定义工具条

1. Python Add-in入门&#xff1a;ArcGIS插件开发新选择 第一次接触ArcGIS插件开发时&#xff0c;我被各种复杂的开发方式搞得晕头转向。直到发现了Python Add-in这个神器&#xff0c;才发现原来开发自定义工具条可以这么简单&#xff01;Python Add-in是Esri在ArcGIS 10.1引入…...

狗狗6种行为识别检测数据集(近3000张图片已标注)| YOLO训练数据集 AI视觉检测

狗狗6种行为识别检测数据集&#xff08;近3000张图片已标注&#xff09;| YOLO训练数据集 AI视觉检测 摘要 在AI视觉落地宠物经济的浪潮中&#xff0c;狗狗行为识别一直是一个非常有商业价值和趣味性的方向。为了帮助大家更高效地训练模型&#xff0c;我整理并开源了一套高质…...

3步免费解锁付费内容:智能内容解锁工具使用指南

3步免费解锁付费内容&#xff1a;智能内容解锁工具使用指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息获取日益困难的今天&#xff0c;付费墙已经成为阻碍知识传播的主要障…...

C++ 浮点数

在 C 中有以下 3 种数据类型可以表示浮点数&#xff0c;分别是 float、double 和 long double。 float 数据类型被认为是单精度。double 数据类型通常是 float 的两倍大小&#xff0c;因此被认为是双精度。顾名思义&#xff0c;long double 数据类型又比 double 要大。这些数据…...

Imaginary跨域资源共享(CORS)终极配置指南:前端图像处理无障碍集成

Imaginary跨域资源共享(CORS)终极配置指南&#xff1a;前端图像处理无障碍集成 【免费下载链接】imaginary Fast, simple, scalable, Docker-ready HTTP microservice for high-level image processing 项目地址: https://gitcode.com/gh_mirrors/im/imaginary Imaginar…...

别再只用Unity做游戏了!用Game4Automation PRO插件,手把手教你搭建一条虚拟生产线(附PLC连接避坑指南)

跨界开发者的工业仿真指南&#xff1a;用Unity打造虚拟生产线全流程 当游戏开发者遇上工业自动化&#xff0c;会碰撞出怎样的火花&#xff1f;Unity作为全球最流行的游戏引擎之一&#xff0c;早已突破了娱乐产业的边界。今天&#xff0c;我们将探索如何利用Game4Automation PRO…...