Gitblit hooks 分支保护与白名单-程序员宅基地

技术标签: python  git  开发工具  

import java.text.MessageFormat;

import com.gitblit.GitBlit
import com.gitblit.models.RepositoryModel
import com.gitblit.models.UserModel
import org.eclipse.jgit.transport.ReceiveCommand
import org.eclipse.jgit.transport.ReceiveCommand.Result
import org.slf4j.Logger
import com.gitblit.utils.ClientLogger

    // 限制的命令
    def protectedCmds_1 = [
        UPDATE:                 Result.REJECTED_OTHER_REASON
    ]
    // 禁止创建,删除 受保护的分支
    def protectedCmds_2 = [
        UPDATE_NONFASTFORWARD:  Result.REJECTED_OTHER_REASON,
        DELETE:                 Result.REJECTED_OTHER_REASON,
        CREATE:                 Result.REJECTED_OTHER_REASON
    ]
    //选择仓库
    switch (repository.name) {
        case 'test.git':

            // 受保护的分支
            def protectedRefs = [
                "refs/heads/master",
                "refs/heads/test",
                "refs/heads/dev"
            ]
            // 白名单
            def authorizedTeams = [ "admin" ]

            for (ReceiveCommand command : commands) {
                // 用户
                def updateUser = user.username
                // 操作类型
                def updateType = command.type
                // 分支名
                def updatedRef = command.refName
                // 判断是否在白名单内
                def team = authorizedTeams.find { updateUser.matches ~it }
                if (team) {
                    clientLogger.info("白名单用户已确认")
                    // clientLogger.info("允许用户 ${updateUser} 对 ${repository.name}:${updatedRef} 进行 ${updateType} 操作")
                }else{
                    clientLogger.info("非白名单用户")
                    // 分支判断
                    def refPattern = protectedRefs.find { updatedRef.matches ~it }
                    if (refPattern) {
                        // master 分支单独权限
                        if (refPattern == "refs/heads/master") {
                            command.setResult(Result.REJECTED_OTHER_REASON, "用户 ${updateUser} 权限不足,无法对 ${repository.name}:${refPattern} 进行 ${updateType} 操作,请联系管理员")
                        }else{
                            def resultCmd_1 = protectedCmds_2[updateType.name()]
                            if (resultCmd_1) {
                                // 禁止创建,删除 受保护的分支
                                command.setResult(resultCmd_1, "用户 ${updateUser} 权限不足,无法对 ${repository.name}:${refPattern} 进行 ${updateType} 操作,请联系管理员")
                            }else{
                                clientLogger.info("未受限操作,无需权限")
                            }
                        }

                    }else{
                        clientLogger.info("未受保护分支,无需权限")
                    }

                }

            }
            break

        default:
            clientLogger.info("${repository.name} 仓库未设置分支权限保护")
            break
    }







转载于:https://my.oschina.net/u/3756690/blog/1830512

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33814685/article/details/92406814

智能推荐

缓冲区溢出(Buffer Overflow)_buffer over flow l-程序员宅基地

文章浏览阅读1.2w次。堆栈溢出堆栈溢出通常是所有的缓冲区溢出中最容易进行利用的。了解堆栈溢出之前,先了解以下几个概念:缓冲区 简单说来是一块连续的计算机内存区域,可以保存相同数据类型的多个实例。 堆栈 堆 栈是一个在计算机科学中经常使用的抽象数据类型。堆栈中的物体具有一个特性:最后一个放入堆栈中的物体总是被最先拿出来,这个特性通常称为后进先出 (LIFO)队列。堆栈中定义了一些操作。两个最重要的是PU..._buffer over flow l

AQS 源码流程分析_aqs 入对之后就一定顺序执行-程序员宅基地

文章浏览阅读455次。我们日常开发中,经常会碰到并发的场景,在 Java 中语言体系里,我们会想到 ReentrantLock、CountDownLatch、Semaphore 等工具,但你是否清楚它们内部的实现原理?这些工具都很类似,底层都是基于AbstractQueuedSynchronizer(AQS)来实现的。今天我们就来一起学习 AQS 内部原理。_aqs 入对之后就一定顺序执行

C语言--编写程序,绘制菱形图_c语言画菱形-程序员宅基地

文章浏览阅读4.1k次。编写一个程序,在屏幕上显示如下图形(图形的层数有输入者自行定义)源代码如下所示:#include<stdio.h>int main(){ int line; // 菱形总行数 int column; // 菱形总列数 int i; // 当前行 int j; // 当前列 printf("请输入菱形的行数(奇数):"); scanf("%d", &line); while(2) { if(line%_c语言画菱形

怎么实现跨域?配置vue跨域proxy,jsonp跨域很简单-程序员宅基地

文章浏览阅读760次,点赞10次,收藏28次。/ 封装axios请求的模块// 用axios重新生成了请求的实例baseURL: ‘’, // 项目发送axios请求的公共地址 值为空timeout: 5000 // 请求超时时间 这里是请求超过五秒后还没有获得请求结果 提示请求超时})// config包含了请求相关的所有信息// 可以同过config对象给请求配置或者修改信息return config // 将配置完成的token返回 如果不返回 请求不会继续进行// 请求发生错误时的回调函数。

兼容Office和WPS中Word图标库_wps officeimageid-程序员宅基地

文章浏览阅读108次。最近在用c#写VSTO文字操作插件,因为要同时在WPS中有效,因此进行了提取。_wps officeimageid

Kali Linux 解决Wine下中文或英文字体乱码的问题 ,一劳永逸法 。_kali wine 中文方块-程序员宅基地

文章浏览阅读4k次,点赞11次,收藏14次。  解决 Kali Linux中 Wine下英文方块乱码的方法  最近在wine下使用notepad++和sublime编辑器的时候,发现英文全部均是方块乱码,熟悉wine的朋友们一定会记得,在.wine文件夹下模拟器的文件结构是和Windows是非常相似的: nautilus .wine/drive_c/  wine中文件结构:  Windows下文件结构:  如果,我们分别在Linux终端下对.wine/drive_c和在Powershell终端对C盘进行tree查看,就会发现文件是高_kali wine 中文方块

随便推点

苹果 macOS Sonoma 14 开发者预览版 Beta 3 发布_mac os sonoma最新版本-程序员宅基地

文章浏览阅读81次。苹果今日向 Mac 电脑用户推送了 macOS 14 开发者预览版 Beta 3 更新。但是并未发现 macOS 14 Sonoma 的第三个开发者测试版的新功能,且更新日志和 Beta 2 类似。_mac os sonoma最新版本

ES6-17【类、类的继承、类的实现、类的修饰】_es6 类修饰 详解-程序员宅基地

文章浏览阅读270次。一.类(1).基础最简单的定义方式class Person{}log(new Person());//Person{}log(typeof Person);function标准写法class Person{ constructor(name = "zhangsan",age = "18"){ //私有属性 this.name = name; this.age = age; } //公有属性 _es6 类修饰 详解

Java 常用类 03 可变字符串和BigDecimal(BigInteger)_java字符串和bigdecimal类-程序员宅基地

文章浏览阅读335次。3.1 可变字符串和BigDecimal3.1.1 可变字符串由于我们的字符串,是不可变的。每次都要在 字符串池里 新建和共享。这样效率很低,而且占用空间大。我们的 Java 就开发了 可变字符串下面的两者,都比传统的 String 类型要快很多。① StringBuffer:JDK1.0提供的,效率低,线程安全。它是实现开辟一个缓冲区,然后操作的时候,直接在 缓冲区里进行操作。② StringBuilder:JDK5.0提供的,效率高,线程不安全3.1.2 StringBuffer①_java字符串和bigdecimal类

【基于FPGA的芯片设计】32×32位寄存器堆_fpga2s需要多少位寄存器-程序员宅基地

文章浏览阅读2.6k次,点赞9次,收藏2次。32×32位寄存器堆设计,杭电计算机组成原理实验四,实验的开发工具是vivado2018,vivado2022也兼容2018_fpga2s需要多少位寄存器

STM32F103 软件实现随机数_stm32f103c8t6可以生成随机数么-程序员宅基地

文章浏览阅读644次。因为STM32F103C8T6,没有硬件随机数,所以需要自己通过软件配置。最后得到的mmm1变量为一个0~100的随机值。首先增加一段include用于产生真随机数。_stm32f103c8t6可以生成随机数么

微信h5页面打开微信内置地图及wx.openLocation回调成功调不起页面的问题_h5 wx.openlocation-程序员宅基地

文章浏览阅读4.5k次。先说下需求吧,我们的需求是通过一个经纬度,然后打开微信内置的地图页面代码如下://导航到停车场 gogogo() { //获取当前页面url //var url = location.href.split('#')[0]; // alert(11111) // window.location.href = // "https://apis.map.qq.com/uri/v1/marker?marker=coord:30.595810_h5 wx.openlocation

推荐文章

热门文章

相关标签