当前位置: 首页 > 工具软件 > InDefero > 使用案例 >

Indefero创建的SVN用户无法访问源码解决方案

马高谊
2023-12-01

问题描述:

    Indefero和SVN集成后,创建的项目,而项目成员无法访问源码标签。

问题分析:

    系统在创建用户是会写dav_svn.passwd文件,此时文件写入是正常的,说明权限没问题;

    在创建项目是,系统应该为每个用户分配读取源码的权限,也就是会写dav_svn.authz文件,然而dav_svn.authz文件每次都会更新,但是内容却是空;

    从分析结果来看应该是代码逻辑问题,问题应该出在SVN同步的代码上;

解决方案:

    打开indefero/src/IDF/Plugin/SyncSvn.php文件,定位到SyncAccess函数,做如下修改:

function SyncAccess($exclude=null)
    {
        $authz_file = Pluf::f('idf_plugin_syncsvn_authz_file');
        $access_owners = Pluf::f('idf_plugin_syncsvn_access_owners', 'rw');
        $access_members = Pluf::f('idf_plugin_syncsvn_access_members', 'rw');
        $access_extra = Pluf::f('idf_plugin_syncsvn_access_extra', 'r');
        $access_public = Pluf::f('idf_plugin_syncsvn_access_public', 'r');
        $access_public_priv = Pluf::f('idf_plugin_syncsvn_access_private', '');
        if (!file_exists($authz_file) or !is_writable($authz_file)) {
            return false;
        }
        $fcontent = '';
        foreach (Pluf::factory('IDF_Project')->getList() as $project) {
            if ($exclude and $exclude->id == $project->id) {
                continue;
            }
            $conf = new IDF_Conf();
            $conf->setProject($project);
            if ($conf->getVal('scm') != 'svn' or
                strlen($conf->getVal('svn_remote_url')) < 0) {     // 原始版本为>0,所以导致无法写入文件
                continue;
            }
            $mem = $project->getMembershipData();
            // [shortname:/]
            $fcontent .= '['.$project->shortname.':/]'."\n";
            foreach ($mem['owners'] as $v) {
                $fcontent .= $v->login.' = '.$access_owners."\n";
            }
            foreach ($mem['members'] as $v) {
                $fcontent .= $v->login.' = '.$access_members."\n";
            }
            // access for all users
            if ($project->private == true) {
                foreach ($mem['authorized'] as $v) {
                    $fcontent .= $v->login.' = '.$access_extra."\n";
                }
                $fcontent .= '* = '.$access_public_priv."\n";
            } else {
                $fcontent .= '* = '.$access_public."\n";
            }
            $fcontent .= "\n";
        }
        file_put_contents($authz_file, $fcontent, LOCK_EX);
        return true;
}


 类似资料: