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

智能推荐

vnc远程桌面centos6.5-程序员宅基地

文章浏览阅读73次。来一个简单粗暴的tigervnc安装的教程,直入主题!安装必备软件yuminstall-ytigervnctigervnc-serveryumgroupinstall-y"Desktop"yumgroupinstall-y'XWindowSystem'yuminstallgnome-panelyuminstallnautilus配置文...

【Python】输入一个数字,输出以下倒立空心三角形_输入一个数输出倒立三角形-程序员宅基地

文章浏览阅读700次。【Python】输入一个数字,输出以下倒立空心三角形_输入一个数输出倒立三角形

PCL 1.7.2 All-in-one Installer MSVC2012 x64_pcl1.7.2-程序员宅基地

文章浏览阅读4.4k次。感谢作者的编译版本:http://unanancyowen.com/?p=1255〈=en Install and Setting Environmental Variables, and Setting Project1. Download the All-in-one Installer, and install.In the standar_pcl1.7.2

Table 'mysql.user' doesn't exist-程序员宅基地

文章浏览阅读9k次。遇到这个错误一般是mysql的数据文件路径配置错了导致basedir = /usr/local/mysqldatadir = /usr/local/mysql/data/mysql在/etc/my.cnf,还有一个安装mysql的位置有一个my.cnf,如果全局的/etc/my.cnf,则看当前安装目录下的my.cnf文件..._table 'mysql.user' doesn't exist

Fast ORB-SLAM-程序员宅基地

文章浏览阅读1.5k次。点云PCL免费知识星球,点云论文速读。文章:FastORB-SLAM: Fast ORB-SLAM method with Coarse-to-Fine Descriptor Indep..._fast orb slam

Ubuntu系统入门指南:基础操作和使用-程序员宅基地

文章浏览阅读2.1k次,点赞32次,收藏49次。本文的目的是为读者提供一个全面的Ubuntu系统入门指南,帮助他们了解Ubuntu系统的基础操作和使用方法。Ubuntu系统作为一种免费、开源、安全、稳定且易于使用的操作系统,越来越受到用户的青睐。然而,对于新手来说,掌握Ubuntu系统的操作和使用可能会有一定的困难。因此,本文的重要性在于向读者介绍Ubuntu系统的基本知识和技巧,帮助他们顺利开始使用Ubuntu系统,并最大限度地发挥其功能和优势。通过本文的阅读,读者将能够掌握Ubuntu系统的安装、基础操作、日常使用和高级功能,并能够解决常见问题。_ubuntu

随便推点

python tornado异步_Tornado异步原理详析-程序员宅基地

文章浏览阅读344次。原创文章出自公众号:「码农富哥」,如需转载请请注明出处!文章如果对你有收获,可以收藏转发,这会给我一个大大鼓励哟!另外可以关注我公众号「码农富哥」 (搜索id:coder2025),我会持续输出Python,算法,计算机基础的 原创 文章Tornado是什么?Tornado是一个用Python编写的异步HTTP服务器,同时也是一个web开发框架。Tornado 优秀的大并发处理能力得益于它的 we..._tornado.ioloop.ioloop.current().call_later

广度优先遍历类似于二叉树的_广度优先遍历类似于二叉树的什么遍历?-程序员宅基地

文章浏览阅读3.9k次。广度优先遍历类似于二叉树的层次遍历。广度优先搜索是从根结点开始沿着树的宽度搜索遍历,也就是按层次的去遍历;从上往下对每一层依次访问,在每一层中,从左往右(也可以从右往左)访问结点,访问完一层就进入下一层,直到没有结点可以访问为止。广度优先搜索(Breadth First Search)(其实是二叉树的层次遍历),又叫宽度优先搜索或横向优先搜索,是从根结点开始沿着树的宽度搜索遍历。从上往下对每一层依..._广度优先遍历类似于二叉树的

数据科学才能释放数据资产价值-程序员宅基地

文章浏览阅读1.2k次,点赞16次,收藏10次。数据可视化和商业智能(BI)工具就是构建数据产品的重要手段,通过丰富多样的图表、报告、控制台等形式,将分析结果直观呈现,并赋予用户自助式分析和探索的能力,从而有效支撑基于数据的决策。总之,现代化的数据架构是数据资产高效流动和价值释放的重要保证。企业只有高度重视数据战略,从组织、文化、架构和人才等多方面着手,才能真正开启数据化转型之路,让数据科学的力量在企业的运营和发展中充分发挥。一方面,企业需要建立统一的数据治理和数据架构体系,将数据作为一种资产来集中管理,打造高质量、统一、完整和安全的数据资产池。

【实时监控主机与某个IP的网络连接情况】-程序员宅基地

文章浏览阅读332次,点赞2次,收藏4次。写个脚本监控主机与某几个IP的连接情况,发现存在这种连接的,记录连接起始时间、源IP源、端口、目的IP、目的端口等信息这个Python脚本与之前的bash脚本功能相同,会实时监控网络连接,并将源IP、源端口、目的IP、目的端口和使用源端口的进程记录到文件中。请注意,这个脚本在Linux系统上运行,可能需要使用root权限。with open(OUTPUT_FILE, “a”) as f:语句在while True:循环的开始处,这意味着在每次循环开始时,文件都会被打开,并在循环结束时关闭。

通用流程编排引擎介绍-程序员宅基地

文章浏览阅读7.7k次,点赞3次,收藏34次。通用流程编排引擎_流程编排

C语言:练习题三_charb,c;inti b='a,c=a-程序员宅基地

文章浏览阅读1k次,点赞3次,收藏7次。认真练习,每一道c语言题目。_charb,c;inti b='a,c=a