该系统为使用PHP开发的基于web的Subversion(SVN)服务器端管理工具。支持功能:SVN仓库管理、SVN用户管理、SVN分组管理、目录授权、目录浏览、Hooks管理、在线dump备份、在线备份恢复、SVN用户禁用、服务器状态管理、日志管理、消息通知、更新检测...
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1075 lines
37 KiB

<?php
/**
* 获取分组列表
*
* @param string $authzContent
* @return
* 0 文件格式错误
* null 无分组
* array('g1','g2') 有分组
*/
function FunGetSvnGroupList($authzContent)
{
preg_match_all("/^\[groups\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (empty(trim($authzContentPreg[1][0]))) {
return null;
} else {
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
return $resultPreg[1];
}
} else {
return '0';
}
}
/**
* 获取分组列表以及每个分组包含的用户列表
*
* @param string $authzContent
* @return
* 0 文件格式错误(不存在[groups]标识)
* null 无分组
* array( 有分组
* 'g1'=>array('u1',u2),
* 'g2'=>array('u2'),
* )
*/
function FunGetSvnGroupUserList($authzContent)
{
preg_match_all("/^\[groups\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (empty(trim($authzContentPreg[1][0]))) {
return null;
} else {
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
array_walk($resultPreg[2], 'ArrayValueTrim');
$groupArray = array_combine($resultPreg[1], $resultPreg[2]);
foreach ($groupArray as $group => $userStr) {
$userArray = explode(',', $userStr);
array_walk($userArray, 'ArrayValueTrim');
$groupArray[$group] = $userArray;
}
return $groupArray;
}
} else {
return '0';
}
}
/**
* 添加分组
*
* @param string $authzContent
* @param string $group
* @return
* 0 文件格式错误
* 1 分组已存在
* string 正常
*/
function FunAddSvnGroup($authzContent, $group)
{
preg_match_all("/^\[groups\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (empty(trim($authzContentPreg[1][0]))) {
$groupContent = "\n[groups]\n$group=\n";
return str_replace($authzContentPreg[0][0], str_replace("[groups]", $groupContent, $authzContentPreg[0][0]), $authzContent);
} else {
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
array_walk($resultPreg[2], 'ArrayValueTrim');
if (in_array($group, $resultPreg[1])) {
return '1';
} else {
$groupContent = "\n";
$groupArray = array_combine($resultPreg[1], $resultPreg[2]);
foreach ($groupArray as $groupStr => $userList) {
$groupContent .= $groupStr . '=';
$userArray = explode(',', $userList);
array_walk($userArray, 'ArrayValueTrim');
$groupContent .= implode(',', $userArray) . "\n";
}
$groupContent .= "$group=\n";
return str_replace($authzContentPreg[1][0], $groupContent, $authzContent);
}
}
} else {
return '0';
}
}
/**
* 从所有仓库路径和分组下修改分组名称
*
* @param string $authzContent
* @param string $oldGroup
* @param string $newGroup
* @param string $rootPath
* @return
* string 正常
*/
function FunUpdSvnGroup($authzContent, $oldGroup, $newGroup)
{
$content1 = "[groups]\n";
$content2 = "";
preg_match_all("/^\[groups\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (!empty(trim($authzContentPreg[1][0]))) {
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
array_walk($resultPreg[2], 'ArrayValueTrim');
if (in_array($oldGroup, $resultPreg[1])) {
$groupContent = "\n";
$groupArray = array_combine($resultPreg[1], $resultPreg[2]);
foreach ($groupArray as $groupStr => $userList) {
if ($groupStr == $oldGroup) {
$groupStr = $newGroup;
}
$groupContent .= $groupStr . '=';
$userArray = explode(',', $userList);
array_walk($userArray, 'ArrayValueTrim');
$groupContent .= implode(',', $userArray) . "\n";
}
$content1 .= $groupContent;
}
}
}
$content2 = preg_replace("/(^@" . $oldGroup . "[\s]*)=/m", "@$newGroup=", str_replace($authzContentPreg[0][0], '', $authzContent));
return $content1 . $content2;
}
/**
* 从所有仓库路径和分组下删除分组名称
*
* @param string $authzContent
* @param string $groupName
* @param string $rootPath
* @return
* string 正常
*/
function FunDelSvnGroup($authzContent, $groupName)
{
$content1 = "[groups]\n";
$content2 = "";
preg_match_all("/^\[groups\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (!empty(trim($authzContentPreg[1][0]))) {
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
array_walk($resultPreg[2], 'ArrayValueTrim');
if (in_array($groupName, $resultPreg[1])) {
$groupContent = "\n";
$groupArray = array_combine($resultPreg[1], $resultPreg[2]);
foreach ($groupArray as $groupStr => $userList) {
if ($groupStr == $groupName) {
continue;
}
$groupContent .= $groupStr . '=';
$userArray = explode(',', $userList);
array_walk($userArray, 'ArrayValueTrim');
$groupContent .= implode(',', $userArray) . "\n";
}
$content1 .= $groupContent;
} else {
$content1 = $authzContentPreg[0][0];
}
}
}
$content2 = preg_replace("/(^@" . $groupName . "[\s]*=.*?)\n/m", "\n", str_replace($authzContentPreg[0][0], '', $authzContent));
return $content1 . $content2;
}
/**
* 为分组添加用户
*
* @param string $authzContent
* @param string $group
* @param string $user
* @return
* 0 文件格式错误(不存在[groups]标识)
* 1 分组不存在
* 2 要添加的用户已存在该分组
* string 正常
*/
function FunAddSvnGroupUser($authzContent, $group, $user)
{
preg_match_all("/^\[groups\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (empty(trim($authzContentPreg[1][0]))) {
return '1';
} else {
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
array_walk($resultPreg[2], 'ArrayValueTrim');
if (in_array($group, $resultPreg[1])) {
$groupContent = "\n";
$groupArray = array_combine($resultPreg[1], $resultPreg[2]);
foreach ($groupArray as $groupStr => $userList) {
$groupContent .= $groupStr . '=';
if (trim($userList) == '') {
$userArray = array();
if ($groupStr == $group) {
array_push($userArray, $user);
}
} else {
$userArray = explode(',', $userList);
array_walk($userArray, 'ArrayValueTrim');
if ($groupStr == $group) {
if (in_array($user, $userArray)) {
return 2;
}
array_push($userArray, $user);
}
}
$groupContent .= implode(',', $userArray) . "\n";
}
return str_replace($authzContentPreg[1][0], $groupContent, $authzContent);
} else {
return '1';
}
}
} else {
return '0';
}
}
/**
* 从分组删除用户
*
* @param string $authzContent
* @param string $group
* @param string $user
* @return
* 0 文件格式错误
* 1 分组不存在
* 2 要删除的用户不在该分组
* string 正常
*/
function FunDelSvnGroupUser($authzContent, $group, $user)
{
preg_match_all("/^\[groups\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (empty(trim($authzContentPreg[1][0]))) {
return '1';
} else {
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
array_walk($resultPreg[2], 'ArrayValueTrim');
if (in_array($group, $resultPreg[1])) {
$groupContent = "\n";
$groupArray = array_combine($resultPreg[1], $resultPreg[2]);
foreach ($groupArray as $groupStr => $userList) {
$groupContent .= $groupStr . '=';
$userArray = explode(',', $userList);
array_walk($userArray, 'ArrayValueTrim');
if ($groupStr == $group) {
if (in_array($user, $userArray)) {
unset($userArray[array_search($user, $userArray)]);
} else {
return 2;
}
}
$groupContent .= implode(',', $userArray) . "\n";
}
return str_replace($authzContentPreg[1][0], $groupContent, $authzContent);
} {
return '1';
}
}
} else {
return '0';
}
}
/**
* 获取某个分组下的所有用户列表
*
* @param string $authzContent
* @param string $group
* @return
* 0 文件格式错误
* 1 分组不存在
* array('u1','u2') 正常
*/
function FunGetSvnUserListByGroup($authzContent, $group)
{
preg_match_all("/^\[groups\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (empty(trim($authzContentPreg[1][0]))) {
return '1';
} else {
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
array_walk($resultPreg[2], 'ArrayValueTrim');
if (in_array($group, $resultPreg[1])) {
$groupArray = array_combine($resultPreg[1], $resultPreg[2]);
$userArray = explode(',', $groupArray[$group]);
array_walk($userArray, 'ArrayValueTrim');
return $userArray;
} else {
return '1';
}
}
} else {
return '0';
}
}
/**
* 获取某个仓库路径下有权限的用户列表
*
* @param string $authzContent
* @param string $repName
* @param string $repPath
* @param string $rootPath
* @return
* 0 不存在该仓库路径的记录
* 1 记录为空
*/
function FunGetRepUserList($authzContent, $repName, $repPath)
{
preg_match_all("/^\[$repName:" . str_replace('/', '\/', $repPath) . "\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (empty(trim($authzContentPreg[1][0]))) {
return null;
} else {
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
return $resultPreg[1];
}
} else {
return '0';
}
}
/**
* 获取某个仓库路径下有权限的用户列表以及对应的权限
*
* @param string $authzContent
* @param string $repName
* @param string $repPath
* @param string $rootPath
* @return
* 0 不存在该仓库路径的记录
* array('u1'=>'rw','u2'=>'r') 正常
*/
function FunGetRepUserPriList($authzContent, $repName, $repPath)
{
preg_match_all("/^\[$repName:" . str_replace('/', '\/', $repPath) . "\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (empty(trim($authzContentPreg[1][0]))) {
return null;
} else {
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
array_walk($resultPreg[2], 'ArrayValueTrim');
$groupArray = array_combine($resultPreg[1], $resultPreg[2]);
return $groupArray;
}
} else {
return '0';
}
}
/**
* 获取某个仓库路径下有权限的分组列表
*
* @param string $authzContent
* @param string $repName
* @param string $repPath
* @param string $rootPath
* @return
* 0 不存在该仓库路径的记录
* array('g1','g2') 正常
*/
function FunGetRepGroupList($authzContent, $repName, $repPath)
{
preg_match_all("/^\[$repName:" . str_replace('/', '\/', $repPath) . "\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (empty(trim($authzContentPreg[1][0]))) {
return null;
} else {
preg_match_all("/^@([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
return $resultPreg[1];
}
} else {
return '0';
}
}
/**
* 获取某个仓库路径下有权限的分组列表以及对应的权限
*
* @param string $authzContent
* @param string $repName
* @param string $repPath
* @param string $rootPath
* @return
* 0 不存在该仓库路径的记录
* array('g1'=>'rw','g2'=>'r') 正常
*/
function FunGetRepGroupPriList($authzContent, $repName, $repPath)
{
preg_match_all("/^\[$repName:" . str_replace('/', '\/', $repPath) . "\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (empty(trim($authzContentPreg[1][0]))) {
return null;
} else {
preg_match_all("/^@([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
array_walk($resultPreg[2], 'ArrayValueTrim');
$groupArray = array_combine($resultPreg[1], $resultPreg[2]);
return $groupArray;
}
} else {
return '0';
}
}
/**
* 为某个仓库路径设置用户权限
* 包括为已有权限的用户修改权限
* 包括为没有权限的用户增加权限
* 如果该目录的该用户的父目录有权限 那么所有子目录继承权限
*
* @param string $authzContent
* @param string $user
* @param string $privilege
* @param string $repName
* @param string $repPath
* @param string $rootPath
* @return
* 0 不存在该仓库路径的记录
* string 正常
*/
function FunSetRepUserPri($authzContent, $user, $privilege, $repName, $repPath)
{
preg_match_all("/^\[$repName:" . str_replace('/', '\/', $repPath) . "\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (empty(trim($authzContentPreg[1][0]))) {
//添加用户
if (trim($privilege) != '') {
return str_replace($authzContentPreg[0][0], "\n[$repName:$repPath]\n$user=$privilege\n", $authzContent);
} else {
return $authzContent;
}
} else {
//进一步判断有没有用户数据
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
array_walk($resultPreg[2], 'ArrayValueTrim');
//处理分组
preg_match_all("/^@([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPregGroup);
array_walk($resultPregGroup[1], 'ArrayValueTrim');
array_walk($resultPregGroup[2], 'ArrayValueTrim');
if (in_array($user, $resultPreg[1])) {
//编辑
$userContent = "\n";
//处理分组
$groupArray = array_combine($resultPregGroup[1], $resultPregGroup[2]);
foreach ($groupArray as $groupStr => $groupPri) {
$userContent .= "@$groupStr=$groupPri\n";
}
//处理用户
$userArray = array_combine($resultPreg[1], $resultPreg[2]);
foreach ($userArray as $userStr => $userPri) {
if ($userStr == $user) {
if ($privilege == "") {
continue;
} else {
$userContent .= "$userStr=$privilege\n";
}
} else {
$userContent .= "$userStr=$userPri\n";
}
}
return str_replace($authzContentPreg[1][0], $userContent, $authzContent);
} else {
//新增
$userContent = "\n";
//处理分组
$groupArray = array_combine($resultPregGroup[1], $resultPregGroup[2]);
foreach ($groupArray as $groupStr => $groupPri) {
$userContent .= "@$groupStr=$groupPri\n";
}
//处理用户
if ($privilege == "") {
} else {
$userContent .= "$user=$privilege\n";
}
$userArray = array_combine($resultPreg[1], $resultPreg[2]);
foreach ($userArray as $userStr => $userPri) {
$userContent .= "$userStr=$userPri\n";
}
return str_replace($authzContentPreg[1][0], $userContent, $authzContent);
}
}
} else {
return '0';
}
}
/**
* 删除某个仓库路径的用户权限
* 父目录有权限 无法取消子目录的权限
*
* @param string $authzContent
* @param string $user
* @param string $repName
* @param string $repPath
* @param string $rootPath
* @return
* 0 不存在该仓库路径的记录
* 1 已删除
* string 正常
*/
function FunDelRepUserPri($authzContent, $user, $repName, $repPath)
{
preg_match_all("/^\[$repName:" . str_replace('/', '\/', $repPath) . "\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (empty(trim($authzContentPreg[1][0]))) {
return '1';
} else {
//进一步判断有没有用户数据
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
array_walk($resultPreg[2], 'ArrayValueTrim');
//处理分组
preg_match_all("/^@([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPregGroup);
array_walk($resultPregGroup[1], 'ArrayValueTrim');
array_walk($resultPregGroup[2], 'ArrayValueTrim');
if (in_array($user, $resultPreg[1])) {
//删除
$userContent = "\n";
//处理分组
$groupArray = array_combine($resultPregGroup[1], $resultPregGroup[2]);
foreach ($groupArray as $groupStr => $groupPri) {
$userContent .= "@$groupStr=$groupPri\n";
}
//处理用户
$userArray = array_combine($resultPreg[1], $resultPreg[2]);
foreach ($userArray as $userStr => $userPri) {
if ($userStr == $user) {
continue;
}
$userContent .= "$userStr=$userPri\n";
}
return str_replace($authzContentPreg[1][0], $userContent, $authzContent);
} else {
return '1';
}
}
} else {
return '0';
}
}
/**
* 修改某个仓库路径的用户权限
*
* @param string $authzContent
* @param string $user
* @param string $privilege
* @param string $repName
* @param string $repPath
* @param string $rootPath
* @return
* 0 不存在该仓库路径的记录
* string 正常
*/
function FunUpdRepUserPri($authzContent, $user, $privilege, $repName, $repPath)
{
preg_match_all("/^\[$repName:" . str_replace('/', '\/', $repPath) . "\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (empty(trim($authzContentPreg[1][0]))) {
if (trim($privilege) != '') {
return str_replace($authzContentPreg[0][0], "\n[$repName:$repPath]\n$user=$privilege\n", $authzContent);
} else {
return $authzContent;
}
} else {
//进一步判断有没有用户数据
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
array_walk($resultPreg[2], 'ArrayValueTrim');
//处理分组
preg_match_all("/^@([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPregGroup);
array_walk($resultPregGroup[1], 'ArrayValueTrim');
array_walk($resultPregGroup[2], 'ArrayValueTrim');
//编辑
$userContent = "\n";
//处理分组
$groupArray = array_combine($resultPregGroup[1], $resultPregGroup[2]);
foreach ($groupArray as $groupStr => $groupPri) {
$userContent .= "@$groupStr=$groupPri\n";
}
//处理用户
$userArray = array_combine($resultPreg[1], $resultPreg[2]);
foreach ($userArray as $userStr => $userPri) {
if ($userStr == $user) {
if ($privilege == "") {
continue;
} else {
$userContent .= "$userStr=$privilege\n";
continue;
}
} else {
$userContent .= "$userStr=$userPri\n";
}
}
return str_replace($authzContentPreg[1][0], $userContent, $authzContent);
}
} else {
return '0';
}
}
/**
* 为某个仓库路径设置分组权限
* 包括为已有权限的分组修改权限
* 包括为没有权限的分组增加权限
* 其中如果分组和用户都设置了权限 但是权限一个为可读 一个为可写 应该遵循什么规则呢
*
* @param string $authzContent
* @param string $group
* @param string $privilege
* @param string $repName
* @param string $repPath
* @param string $rootPath
* @return
* 0 不存在该仓库路径的记录
* string 正常
*/
function FunSetRepGroupPri($authzContent, $group, $privilege, $repName, $repPath)
{
preg_match_all("/^\[$repName:" . str_replace('/', '\/', $repPath) . "\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (empty(trim($authzContentPreg[1][0]))) {
if (trim($privilege) != "") {
return str_replace($authzContentPreg[0][0], "\n[$repName:$repPath]\n@$group=$privilege\n", $authzContent);
} else {
return $authzContent;
}
} else {
//进一步判断有没有用户数据
preg_match_all("/^@([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPregGroup);
array_walk($resultPregGroup[1], 'ArrayValueTrim');
array_walk($resultPregGroup[2], 'ArrayValueTrim');
//处理用户
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
array_walk($resultPreg[2], 'ArrayValueTrim');
if (in_array($group, $resultPregGroup[1])) {
//编辑
$groupContent = "\n";
//处理分组
$groupArray = array_combine($resultPregGroup[1], $resultPregGroup[2]);
foreach ($groupArray as $groupStr => $groupPri) {
if ($groupStr == $group) {
if ($privilege == "") {
continue;
} else {
$groupContent .= "@$group=$privilege\n";
}
} else {
$groupContent .= "@$groupStr=$groupPri\n";
}
}
//处理用户
$userArray = array_combine($resultPreg[1], $resultPreg[2]);
foreach ($userArray as $userStr => $userPri) {
$groupContent .= "$userStr=$userPri\n";
}
return str_replace($authzContentPreg[1][0], $groupContent, $authzContent);
} else {
//新增
$groupContent = "\n";
//处理分组
if ($privilege == "") {
} else {
$groupContent .= "@$group=$privilege\n";
}
$groupArray = array_combine($resultPregGroup[1], $resultPregGroup[2]);
foreach ($groupArray as $groupStr => $groupPri) {
$groupContent .= "@$groupStr=$groupPri\n";
}
//处理用户
$userArray = array_combine($resultPreg[1], $resultPreg[2]);
foreach ($userArray as $userStr => $userPri) {
$groupContent .= "$userStr=$userPri\n";
}
return str_replace($authzContentPreg[1][0], $groupContent, $authzContent);
}
}
} else {
return '0';
}
}
/**
* 删除某个仓库的分组权限
*
* @param string $authzContent
* @param string $group
* @param string $repName
* @param string $repPath
* @param string $rootPath
* @return
* 0 不存在该仓库路径的记录
* 1 已删除
* string 正常
*/
function FunDelRepGroupPri($authzContent, $group, $repName, $repPath)
{
preg_match_all("/^\[$repName:" . str_replace('/', '\/', $repPath) . "\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (empty(trim($authzContentPreg[1][0]))) {
return '1';
} else {
//进一步判断有没有用户数据
preg_match_all("/^@([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPregGroup);
array_walk($resultPregGroup[1], 'ArrayValueTrim');
array_walk($resultPregGroup[2], 'ArrayValueTrim');
//处理用户
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
array_walk($resultPreg[2], 'ArrayValueTrim');
if (in_array($group, $resultPregGroup[1])) {
//编辑
$groupContent = "\n";
//处理分组
$groupArray = array_combine($resultPregGroup[1], $resultPregGroup[2]);
foreach ($groupArray as $groupStr => $groupPri) {
if ($groupStr == $group) {
continue;
} else {
$groupContent .= "@$groupStr=$groupPri\n";
}
}
//处理用户
$userArray = array_combine($resultPreg[1], $resultPreg[2]);
foreach ($userArray as $userStr => $userPri) {
$groupContent .= "$userStr=$userPri\n";
}
return str_replace($authzContentPreg[1][0], $groupContent, $authzContent);
} else {
return '1';
}
}
} else {
return '0';
}
}
/**
* 修改某个仓库路径的分组权限
*
* @param string $authzContent
* @param string $group
* @param string $privilege
* @param string $repName
* @param string $repPath
* @param string $rootPath
* @return
* 0 不存在该仓库路径的记录
* 1 该仓库下不存在该分组
* string 正常
*/
function FunUpdRepGroupPri($authzContent, $group, $privilege, $repName, $repPath)
{
preg_match_all("/^\[$repName:" . str_replace('/', '\/', $repPath) . "\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
if (empty(trim($authzContentPreg[1][0]))) {
if (trim($privilege) != "") {
return str_replace($authzContentPreg[0][0], "\n[$repName:$repPath]\n@$group=$privilege\n", $authzContent);
} else {
return $authzContent;
}
} else {
//进一步判断有没有用户数据
preg_match_all("/^@([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPregGroup);
array_walk($resultPregGroup[1], 'ArrayValueTrim');
array_walk($resultPregGroup[2], 'ArrayValueTrim');
//处理用户
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
array_walk($resultPreg[2], 'ArrayValueTrim');
if (in_array($group, $resultPregGroup[1])) {
//编辑
$groupContent = "\n";
//处理分组
$groupArray = array_combine($resultPregGroup[1], $resultPregGroup[2]);
foreach ($groupArray as $groupStr => $groupPri) {
if ($groupStr == $group) {
if ($privilege == "") {
continue;
} else {
$groupContent .= "@$group=$privilege\n";
}
} else {
$groupContent .= "@$groupStr=$groupPri\n";
}
}
//处理用户
$userArray = array_combine($resultPreg[1], $resultPreg[2]);
foreach ($userArray as $userStr => $userPri) {
$groupContent .= "$userStr=$userPri\n";
}
return str_replace($authzContentPreg[1][0], $groupContent, $authzContent);
} else {
return '1';
}
}
} else {
return '0';
}
}
/**
* 获取某个用户有权限的所有仓库列表以及对应的权限
*
* @param string $authzContent
* @param string $user
* @param string $rootPath
* @return
* null 无记录
* array('rep1'=>'r','rep2'=>'rw') 正常
*/
function FunGetUserPriRepList($authzContent, $user)
{
preg_match_all("/^\[(.*?):(.*?)\][A-za-z0-9_=@\s]*?" . $user . "[\s]*=[\s]*([rw]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[1])) {
array_walk($authzContentPreg[1], 'ArrayValueTrim');
array_walk($authzContentPreg[3], 'ArrayValueTrim');
return array_combine($authzContentPreg[1], $authzContentPreg[3]);
} else {
return null;
}
}
/**
* 获取某个用户有权限的所有仓库列表
*
* @param string $authzContent
* @param string $user
* @param string $rootPath
* @return
* null 无记录
* array('rep1','rep2'') 正常
*/
function FunGetUserPriRepListWithoutPri($authzContent, $user)
{
preg_match_all("/^\[(.*?):(.*?)\][A-za-z0-9_=@\s]*?" . $user . "[\s]*=[\s]*([rw]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[1])) {
array_walk($authzContentPreg[1], 'ArrayValueTrim');
return $authzContentPreg[1];
} else {
return null;
}
}
/**
* 获取某个分组有权限的仓库列表以及对应的权限
*
* @param string $authzContent
* @param string $group
* @param string $rootPath
* @return
* null 无记录
* array('rep1'=>'r','rep2'=>'rw') 正常
*/
function FunGetGroupPriRepList($authzContent, $group)
{
preg_match_all("/^\[(.*?):(.*?)\][A-za-z0-9_=@\s]*?" . "@$group" . "[\s]*=[\s]*([rw]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[1])) {
array_walk($authzContentPreg[1], 'ArrayValueTrim');
array_walk($authzContentPreg[3], 'ArrayValueTrim');
return array_combine($authzContentPreg[1], $authzContentPreg[3]);
} else {
return null;
}
}
/**
* 获取某个分组有权限的仓库列表
*
* @param string $authzContent
* @param string $group
* @param string $rootPath
* @return
* null 无记录
* array('rep1','rep2') 正常
*/
function FunGetGroupPriRepListWithoutPri($authzContent, $group)
{
preg_match_all("/^\[(.*?):(.*?)\][A-za-z0-9_=@\s]*?" . "@$group" . "[\s]*=[\s]*([rw]*)/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[1])) {
array_walk($authzContentPreg[1], 'ArrayValueTrim');
return $authzContentPreg[1];
} else {
return null;
}
}
/**
* 向配置文件写入仓库路径
*
* @param string $authzContent
* @param string $repName
* @param string $repPath
* @param string $rootPath
* @return
* 1 已存在
* string 正常
*/
function FunSetRepAuthz($authzContent, $repName, $repPath)
{
preg_match_all("/^\[$repName:" . str_replace('/', '\/', $repPath) . "\]/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
return '1';
} else {
return $authzContent . "\n[$repName:$repPath]\n";
}
}
/**
* 从配置文件删除指定仓库的所有路径
*
* @param string $authzContent
* @param string $repName
* @param string $rootPath
* @return
*
* 1 已删除
* string 正常
*/
function FunDelRepAuthz($authzContent, $repName)
{
preg_match_all("/^\[$repName:.*\][\s\S][^\[]*/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[0])) {
foreach ($authzContentPreg[0] as $key => $value) {
$authzContent = str_replace($value, "\n", $authzContent);
}
return $authzContent;
} else {
return '1';
}
}
/**
* 从配置文件修改仓库名称
* 修改该仓库所有路径的仓库名称
*
* @param string $authzContent
* @param string $oldRepName
* @param string $newRepName
* @param string $rootPath
* @return
* 1 仓库不存在
* string 正常
*/
function FunUpdRepAuthz($authzContent, $oldRepName, $newRepName)
{
preg_match_all("/^\[$oldRepName:(.*?)\]/m", $authzContent, $authzContentPreg);
if (array_key_exists(0, $authzContentPreg[1])) {
foreach ($authzContentPreg[0] as $key => $value) {
$authzContent = str_replace($value, '[' . $newRepName . ':' . $authzContentPreg[1][$key] . ']', $authzContent);
}
return $authzContent;
} else {
return '1';
}
}
/**
* 从所有仓库路径和分组下删除用户
* 从所有分组中删除用户
* 从所有仓库下删除用户
*
* @param string $authzContent
* @param string $username
* @param string $rootPath
* @return
* 1 用户不存在
* string 正常
*/
function FunDelUserAuthz($authzContent, $username)
{
$content1 = "[groups]\n";
$content2 = "";
preg_match_all("/^\[groups\]([\s\S][^\[]*)/m", $authzContent, $authzContentPreg1);
if (array_key_exists(0, $authzContentPreg1[0])) {
if (!empty(trim($authzContentPreg1[1][0]))) {
preg_match_all("/^([A-Za-z0-9_\s]*[^\s])\s*=(.*)/m", $authzContentPreg1[1][0], $resultPreg);
array_walk($resultPreg[1], 'ArrayValueTrim');
array_walk($resultPreg[2], 'ArrayValueTrim');
$groupContent = "\n";
$groupArray = array_combine($resultPreg[1], $resultPreg[2]);
foreach ($groupArray as $groupStr => $userList) {
$groupContent .= $groupStr . '=';
$userArray = explode(',', $userList);
array_walk($userArray, 'ArrayValueTrim');
if (in_array($username, $userArray)) {
unset($userArray[array_search($username, $userArray)]);
}
$groupContent .= implode(',', $userArray) . "\n";
}
$content1 .= $groupContent;
}
}
$content2 = preg_replace("/([^@]^$username" . "[\s]*=.*?)\n/m", "\n", str_replace($authzContentPreg1[0][0], '', $authzContent));
return $content1 . $content2;
}
/**
* 从所有仓库路径和分组下修改用户名
*
* @param string $authzContent
* @param string $oldUsername
* @param string $newUsername
* @param string $rootPath
* @return
* string 正常
*/
function FunUpdUserAuthz($authzContent, $oldUsername, $newUsername)
{
}