소스 버전관리를 위해서 사용하는 SVN을 설치하고 이전까지는 내부 개발자용으로만 사용하느라 각 Repository 나 Project단위로 접근제어를 할일이 없었습니다.

사용성의 편의(?)를 위해 apache DAV 연동으로 계정만 주어지면 모두 접근이 가능했었기 때문입니다.

 

하지만 외부 프로젝트를 하면서 외부사람들과 교감*(?)을 하기위해 각 프로젝트별로 접근권한을 할당해야 할일이 생겼습니다.

 

svn 프로토콜을 사용하는 방식에서의 접근권한은 어렵지 않게 세팅이 가능한데, 이상하게 apache와 연동하는 http 에서의 접근권한에 대한 참고할 글은 그다지 많지 않아 한시간이나 넘는 삽질을 또 하게 되었습니다. 알면 10분도 안걸리는 일인데 말이죠.

 

이전 redmine + apache + svn 연동 설치과정에 대한 글은 다음을 참고하십시오.

http://gubok.tistory.com/352

 

개략적인 순서는 다음과 같습니다.

 

1. httpd-vhosts.conf 수정

2. access_control 파일 생성 및 수정

3. apache restart

 

1. vhosts.conf 파일 수정

기존 VirtualHost의 Location 부분에 다음 항목을 추가합니다.

SVNPathAuthz on
AuthzSVNAccessFile "D:/Redmine/subversion/svn_access_control.authz"

 

2. svn_access_control.authz 파일은 없습니다. 이름도 임의로 잡아서 생성하면 됩니다. .txt로 해도 됩니다.

저는 좀 뽀대가 있어보이려고 이름도 그렇고 확장자도 authz를 썼을 뿐입니다.

 

access_control 파일을 작성합니다.

이부분에서 좀 혼란을 겪었습니다.

 

[groups]
system= admin
team1 = user1, user2

 

[/]
* =

 

[repositoryA:/]  <== Repository 상 root를 의미합니다.
@system = rw

 

[repositoryA:/trunk/projectA]
@team1 = rw
user3 = r

 

정말 별거 없는데 한시간넘게 헤매다니... 무능한 제자신을 탓해야겠지요...

 

SVN 별로 저장소를 여러개 가져가고 또 저장소별로 프로젝트를 여러개 관리하게 되는데, 위와 같은 방법으로 규칙을 잡아서 작성하면 됩니다.

 

3. 아파치 재시작후 브라우져에서 프로젝트 URL로 접근을 시도 해봅니다.

정상으로 접근이 되면 readonly 사용자를 테스트 하기 위해 eclipse에서 테스트를 해봅니다.

commit을 하려고 하면 다음과 같은 오류(?) 메시지가 나옵니다.

 

Some of selected resources were not committed.
Authentication error.
svn: E170001: Commit failed (details follow):

svn: E170001: Commit failed (details follow):
svn: E170001: MKACTIVITY of '/svn/repositoryA/!svn/act/ae5aeaef-3e01-0010-a2b5-9eref80aae801c': 403 Forbidden (http://localhost:80

 

테스트한 svn full path는 다음과 같습니다. http://localhost/svn/repositoryA/trunk/projectA 입니다.

개인적으로 access_control url 작성시 좀 헷갈렸던 부분이라서 명시합니다.

모든 URL은 Repository 별로 [/]를 시작합니다.

 

이상입니다. 다른분들은 10분만에 모두 해결하시길...  & 도움이 되셨다면 한번씩 꾸~욱 눌러주세요. 아시죠? ㅎㅎㅎ

 

참고 : http://serverfault.com/questions/13853/how-do-i-restrict-repository-access-via-websvn