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