《GitLab批量修改项目成员权限以及生成报表逻辑实现》

49 篇文章 0 订阅
5 篇文章 0 订阅

1.需求

生产中一个小伙伴需要将GitLab上所有的项目中的master权限只保留给Administra用户,其余具备master权限的用户降权为developer权限,并且被降权的用户名输出为报表,未降权前的项目下的所有成员,以“项目名用户名 权限”的格式输出为报表。


2.设计思路

主要参考了三份文档:

使用gitlab API

GitLab Documentation/Group and project members

GitLab Documentation/Projects

-------------------------------------------------------------------------------------------

①通过python requests模块中的get/put方法进行gitlab Api的相应操作

②通过get方法获取GitLab上的项目:


③通过put方法调用如下GitLab接口,实现修改成员权限功能:

curl --request PUT --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/groups/:id/members/:user_id?access_level=40
其中master所对应的access_level为40,developer的权限为30,将access_level从40改成30就实现了降权



3.代码实现

①修改成员权限

'''
Author:司小幽
time:2016-11-30 ~ 2016-12-1
function:遍历GitLab上的项目,将每个项目中除Administrator用户外,其余具有master权限的用户更改为developer权限。
'''

import requests
import json
import csv

#获取projectId
urlId = 'http://{Your Git Ip}/api/v3/projects?private_token={Your Private token}'
projectId = requests.get(urlId)
idData=json.loads(projectId.text)
dict={}
dict1={}

#将项目成员名分别和id以及access_level建立两种映射关系
def getProjectMember(projectId):
    urlMember = 'http://{Your Git Ip}/api/v3/projects/'+str(projectId)+'/members?private_token={Your Private token}'
    projectMember=requests.get(urlMember)
    membersData=json.loads(projectMember.text)
    for j in membersData:
        dict[j["name"]] = j["id"]
        dict1[j["name"]]=j["access_level"]

#修改成员权限,并将更改权限的成员名输出至报表
def modifyUserLevel(projectId):
    getProjectMember(projectId)
    for name in dict1:
        if name != 'Administrator':
            if dict1[name] == 40:
                    urlPut='http://{Your Git Ip}/api/v3/projects/'+str(projectId)+'/members/'+str(dict[name])+'?access_level=30?private_token={Your Private token}'
                    put=requests.put(urlPut)
                    writer = csv.writer(csvfile)
                    data=[]
                    data.append(name)
                    writer.writerows(data)
#主方法
csvfile = file('{Path}', 'wb')
for projectId in idData:
    modifyUserLevel(projectId["id"])
csvfile.close()

②生成规范格式报表

'''
Author:司小幽
TIME:2016-11-30 ~ 2016-12-1
function:以”GitLab项目名 用户名 用户权限“的格式将GitLab上的对应数据写入.csv文件(除了Administrator)
'''


import requests
import json
import csv

#获取projectId
urlId = 'http://{Your Git Ip}/api/v3/projects?private_token={Your Private token}'
projectId = requests.get(urlId)
idData=json.loads(projectId.text)
dict={}
dict1={}

#将项目成员名分别和id以及access_level建立两种映射关系
def getProjectMember(projectId):
    urlMember = 'http://{Your Git Ip}/api/v3/projects/'+str(projectId)+'/members?private_token={Your Private token}'
    projectMember=requests.get(urlMember)
    membersData=json.loads(projectMember.text)
    for j in membersData:
        dict[j["name"]] = j["id"]
        dict1[j["name"]]=j["access_level"]

#未降权前的除Adminstrator用户的其余项目所有用户以“项目名 用户名 权限”格式输出至报表
csvfile = file('{Path}', 'wb')
for projectId in idData:
    getProjectMember(projectId["id"])
    for name in dict1:
        if name != 'Administrator':
            writer = csv.writer(csvfile)
            data=[]
            data.append((projectId["name"], name, dict1[name]))
            writer.writerows(data)
csvfile.close()

4.问题说明

上述代码仅仅是逻辑上成立的实现,其中第二部分生成规范格式的报表可以实打实地实现,但第一部分,可能权限不够,会出现401,not Authorized的字样,但逻辑上没有问题。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司小幽

真诚赞赏,手留余香。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值