我正在尝试将 Windows Server 2008 上 Apache 上托管的 SVN 链接到 Active Directory。
我明白了我需要做什么来管理存储库级别的用户组:
<Location "/SampleRepository1">
DAV svn
SVNPath H:/Repositories/SampleDirectory1
AuthBasicProvider ldap
AuthzLDAPAuthoritative Off
AuthLDAPURL "ldap://.../DC=...,DC=com?sAMAccountName?sub?(objectClass=*)" none
AuthLDAPBindDN "CN=Subversion,OU=Subversion,DC=...,DC=com"
AuthLDAPBindPassword "..."
AuthType Basic
AuthName "Use your sAMAccountName to connect. If you're unsure, write to [email protected]."
require ldap-group CN=Subversion OpenSource Contributors,OU=Subversion,DC=...,DC=com
require ldap-group CN=Subversion Administrators,OU=Subversion,DC=...,DC=com
</location>
<Location "/SampleRepository2">
DAV svn
SVNPath H:/Repositories/SampleDirectory2
AuthBasicProvider ldap
AuthzLDAPAuthoritative Off
AuthLDAPURL "ldap://.../DC=...,DC=com?sAMAccountName?sub?(objectClass=*)" none
AuthLDAPBindDN "CN=Subversion,OU=Subversion,DC=...,DC=com"
AuthLDAPBindPassword "..."
AuthType Basic
AuthName "Use your sAMAccountName to connect. If you're unsure, write to [email protected]."
require ldap-group CN=Subversion Administrators,OU=Subversion,DC=...,DC=com
</location>
令我烦恼的是,重复太多了:如果SVNPath
从ldap-group
一个存储库到另一个存储库发生改变,其他一切仍保持不变。
如何避免重复代码,同时能够将一些存储库授权给不同的组?
答案1
您的担忧源于将 Apache 的配置视为代码;但事实并非如此。如果您从这个角度考虑,您会发疯的。
它没有逻辑结构,只有针对某些单个命令的一些基本条件构造,几乎没有变量操作。编程语言能够让您避免代码重复并改善逻辑流程的所有功能在设计上都不存在;毕竟,它只是一个配置文件 - 有些人会认为它太灵活了(因此,很容易将配置变成一个巨大的无意义的混乱)。
也就是说,您可以通过仅将一些指令应用于该 URL 路径的父级来减少那里的大量配置;假设您可以安全地将这些指令应用于/
,并且这些指令适用于系统中的每个存储库:
<Location "/">
DAV svn
AuthBasicProvider ldap
AuthzLDAPAuthoritative Off
AuthLDAPURL "ldap://.../DC=...,DC=com?sAMAccountName?sub?(objectClass=*)" none
AuthLDAPBindDN "CN=Subversion,OU=Subversion,DC=...,DC=com"
AuthLDAPBindPassword "..."
AuthType Basic
AuthName "Use your sAMAccountName to connect. If you're unsure, write to [email protected]."
</Location>
<Location "/SampleRepository1">
SVNPath H:/Repositories/SampleDirectory1
require ldap-group CN=Subversion OpenSource Contributors,OU=Subversion,DC=...,DC=com
require ldap-group CN=Subversion Administrators,OU=Subversion,DC=...,DC=com
</Location>
<Location "/SampleRepository2">
SVNPath H:/Repositories/SampleDirectory2
require ldap-group CN=Subversion Administrators,OU=Subversion,DC=...,DC=com
</Location>
与请求匹配的所有<Location>
块都将对其应用指令(按照文件中的顺序),这意味着您可以将许多通用配置分离到适用的父路径中。