我试图将Windows Server 2008上Apache上托pipe的SVN链接到Active Directory。
我明白了我需要做什么来pipe理存储库级别的用户组:
<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从版本库更改为版本库,其他部分保持不变。
如何避免重复代码,同时能够授权一些存储库到不同的组?
您的担心源于将Apache的configuration视为代码; 它不是。 从这个angular度来看,你会让自己疯狂。
没有逻辑结构,只有某些个别命令的基本条件结构,并且没有variables操作。 所有让编程语言使你避免代码重复和改善逻辑stream程的东西都不会出现在devise中; 毕竟它只是一个configuration文件 – 有些人会认为它太灵活了(因此,太容易把configuration变成一个巨大的无意义的混乱)。
也就是说,通过将一些指令应用到该URLpath的父项,可以减less很多configuration, 假设您可以安全地将这些指令应用于/ ,并且这些指令适用于系统中的每个存储库:
<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>块都会将它们的指令应用到它(按文件中的顺序),这意味着你可以将很多通用的configuration分解成一个合适的父path。