Depois de mais investigações, encontrei a solução na forma de controle de acesso ao SVN.
Usando authz_svn_module
, meu diretório do Subversion na configuração do Apache se parece com:
<Location /svn>
# Tell apache this is a subversion repository
DAV svn
# Where the subversion repository list exists on the file system
SVNParentPath "/var/svn"
# What kind of authentication
AuthType Basic
AuthName "Restricted!"
AuthBasicProvider ldap
AuthLDAPBindDN "YOUR BIND DN"
AuthLDAPBindPassword "YOUR BIND PASSWORD"
AuthLDAPURL "ldaps://yourldapserver.com:636/other_info"
AuthzSVNAccessFile /etc/httpd/svnaccess.txt
Require valid-user
</Location>
Bastante básico - a linha importante aqui é a AuthzSVNAccessFile
- isso aponta para o arquivo que será gerado automaticamente e para quais usuários têm permissão para quais diretórios.
Este arquivo "svnaccess.txt" seria parecido com isto:
[project1:/]
joe_user = rw
mary_beth = rw
$anonymous = r
[project2:/]
james_smith = rw
[project3:/]
john_deere = rw
$anonymous = r
Os nomes de usuários listados aqui são os nomes de usuários autenticados pelo LDAP. Eles não precisam ser registrados pelo Subversion (eles são carregados com o usuário na autenticação). O @anonymous
é um curinga: qualquer pessoa que não esteja autenticada, ou que possa satisfazer outra diretiva Allow
na sua configuração do Apache. Este arquivo só deve ser legível por root (ou quem inicia o serviço Apache).
A criação deste arquivo pode ser gerada automaticamente - dependendo de onde sua informação está vindo. No meu caso, eu tenho um servidor Redmine que contém informações sobre usuários e projetos, e qual usuário tem acesso a qual projeto. Um pequeno script Python pode ser escrito para extrair essas informações do banco de dados e usado para gerar esse arquivo automaticamente (se usado como uma tarefa cron). É uma maneira prática de fazer as coisas, mas depois de trabalhar e automatizar, você não precisa se preocupar em reescrever novamente as regras de autenticação para cada novo repositório de projeto / subversão criado.
(E no lado positivo, as alterações neste arquivo "svnaccess.txt" não requerem uma reinicialização do Apache!)