겸손한 개발을 위한 자양분

서브버전과 함께 사용하는 WebSVN을 연동해보면,
SVN의 ParentPath가 모두 보이는것을 확인할 수있다.

내가 잘못알고 있어서인지
SVN 폴더 내부의 authz, svnserve.conf 파일을 수정해도
WebSVN에서는 모든 저장소가 리스트되어
보안성을 가져야하는 저장소(WebSVN에 나타나지 않지만 실제 존재하는)
문제 때문에 사용에 제약이 있었다.

웹에서도 문제 해결에 대한 답을 확인 할 수 없어
소스코드 수정으로 해결하였다.

내가 사용한 방법은,
보안성을 주려는 폴더에 특정 PREFIX를 두어
해당 PREFIX를 갖는 폴더는 화면상에 나타나는 List에
추가하지 않는것이다.

다음은 "_preserve_"라는 문자열로 시작되는 저장소를 숨기도록 수정하는 코드이다.

< WebSVN \ index.php >

if ($config->flatIndex)
{
   // Create the flat view
  
   $projects = $config->getRepositories();
   $i = 0;
   $listing = array ();
   foreach ($projects as $project)
   {
      // if ($project->hasReadAccess("/", true))      
      if ( $project->hasReadAccess("/", true)                      
&&
           strncmp($project->getDisplayName(),"_preserve_",10) != 0 )
      {
         $url = $config->getURL($project, "/", "dir");
     
         $listing[$i]["rowparity"] = $i % 2;
         $listing[$i++]["projlink"] = "<a href=\"${url}sc=$showchanged\">".$project->getDisplayName()."</a>";
      }
   }
   $vars["flatview"] = true;
   $vars["treeview"] = false;  
}
else
{
   // Create the tree view
  
   $projects = $config->getRepositories();
   reset($projects);
   $i = 0;
   $listing = array ();
   $curgroup = NULL;
   $parity = 0;
   foreach ($projects as $project)
   {
      // if ($project->hasReadAccess("/", true))      
      if ( $project->hasReadAccess("/", true)                       &&
           strncmp($project->getDisplayName(),"_preserve_",10) != 0 )

      {
         $listing[$i]["rowparity"] = $parity % 2;
         $url = $config->getURL($project, "/", "dir");
 ...
기존 코드는 주석처리하고 붉은색 코드를 추가하였다.

코드 수정 전에는 다음과 같이 모든 저장소가 표시된다.
사용자 삽입 이미지


코드 수정후에는 다음과 같이 해당 PREFIX에 대하여 숨겨진것을 확인할 수 있다.
사용자 삽입 이미지


편의에 따라 헤더파일을 생성하여,
PREFIX별 권한 설정도 가능할 것으로 판단된다.