Gitlab禁止用户创建群组和项目

Posted catoop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gitlab禁止用户创建群组和项目相关的知识,希望对你有一定的参考价值。

Gitlab 默认注册和创建的用户是拥有创建群组和创建项目权限的,在企业应用中,可能更希望普通用户没有这样的权限,需要通过申请获得。
下文将通过修改配置说明Gitlab限制创建群组和创建项目权限。

配置方法

1、创建用户界面有设置这两个权限的配置,这个只有管理员可以设置,用户自己的用户界面是没有的,如下所示:

2、如果我们希望设置这两个配置的默认值,可以按如下配置处理

Projects limit 在 Settings > Gereral 中可以直接配置生效:

Can create group 则需要通过修改配置文件 config/gitlab.rb 后,重启服务生效,如下所示:

### GitLab user privileges
# gitlab_rails['gitlab_default_can_create_group'] = true
gitlab_rails['gitlab_default_can_create_group'] = false
# gitlab_rails['gitlab_username_changing_enabled'] = true

本文截稿版本 gitlab-ce:15.0.2-ce.0 还不支持界面配置

更多内容详见官网文档:https://docs.gitlab.com/ee/raketasks/user_management.html#update-all-users-in-a-given-group-to-project_limit0-and-can_create_group-false

回收存量用户权限

通过脚本对 API 操作完成对现存用户的批量修改操作,回收创建组和创建项目权限

1、先安装 python-gitlab 包

pip3 install python-gitlab

2、保存如下脚本为 gitlab.py 后,执行 python3 gitlab.py 会持续输出日志,等待执行结束

#!/bin/python3

__autor__ = "chunk"
__date__ = "2022-05-10"

import gitlab
import logging
import sys


logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(message)s",
    handlers=[
        logging.FileHandler("debug.log"),
        logging.StreamHandler(sys.stdout)
    ]
)
logging.debug('This message is skipped as a level is set as INFO')
logging.info('So should this')
logging.warning('And this, too')
logging.error('Testing non-ASCII character, Ø and ö')

url = 'https://gitlab.abc.com/'  # gitlab安装地址
private_token = '123456'  # gitlab 登录密钥 需自己设置

# 登录 获取gitlab操作对象gl
gl = gitlab.Gitlab(url, private_token)

# 获取第一页的用户列表 (返回[<User id:1>,<User id:2>])
# users = gl.users.list()
# log.info(users)
# 获取所有的用户列表
users = gl.users.list(all=True)
for a in users:
    if a.id != 1 and a.id != 2 and a.id != 23 and a.id !=13 and a.id !=4:
    # 修改用户属性权限
      logging.info("正在处理当前用户: user".format(user=a.username))
      a.can_create_group = False  
      a.projects_limit = 0
      a.save()
      logging.info("用户名:a ,名字: b, ID: c, projects limit: d,允许创建组: e".format(a=a.username,b=a.name,c=a.id,d=a.projects_limit,e=a.can_create_group))
      

    # print(a.username)
    # print(a.name)
    # print(a.id)
    # print(a.projects_limit)
    # print(a.can_create_group)
# print(users)

# log.info(users)

# 创建用户
"""
常用参数:以下参数都可以使用user对象进行修改
email (必填)-电子邮件
username (必填)-用户名
name (必填)-名称
password (可选)-密码
can_create_group (可选)-用户可以创建组-正确或错误
skip_confirmation (可选)-跳过确认-正确或错误(默认)
external (可选)-将用户标记为外部用户-true或false(默认)
"""
# user = gl.users.create('email': 'qinsh@qq.com',
#                         'password': 'qinsh123456',
#                         'username': 'qinsh',
#                         'name': '秦始皇')

# 根据用户ID获取用户对象
# user = gl.users.get(1)
# 根据用户Git账号获取用户对象
# user = gl.users.list(username="qinsh")[0]

# # 根据用户对象可以进行如下操作
# username = user.username  # 获取用户Git账号
# name = user.name  # 获取用户姓名
# user_id = user.id  # 获取用户ID

# # 修改用户属性
# user.external = True  # 将用户标记为外部用户
# user.save()

# # 删除用户
# gl.users.delete(user_id)  # 根据用户ID进行删除
# user.delete()  # 根据用户对象直接进行删除

脚本参考:https://blog.csdn.net/u010674101/article/details/124684940


(END)

以上是关于Gitlab禁止用户创建群组和项目的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab禁止用户创建群组和项目

Centos 7搭建Gitlab服务器以及操作(创建项目,创建群组,创建用户,添加密钥)

Gitlab搭建部署及配置

Gitlab调用API更改用户权限属性

设计一个简单的devops系统

使用 Ejabberd 和 Smack for Android 创建群聊功能的正确方法是啥?