SVN可以与授权服务集成吗

SVN可以与授权服务集成吗,svn,Svn,我想配置SVN,使其与外部服务对话以获得授权。外部服务将有其逻辑来决定用户对路径的访问类型。当用户访问SVN时,应进行身份验证,然后联系授权服务获取访问详细信息-读/写/删除等。这是否可能,以及如何配置SVN来实现这一点。假设授权服务已经可用。您所说的是什么类型的授权服务。Subversion不进行授权。相反,它将授权传递给另一个服务。您可以使用任何与apachehttpd一起工作的服务(如LDAP和activedirectory)。您还可以使用SASL oversvnserve连接到其他服务(

我想配置SVN,使其与外部服务对话以获得授权。外部服务将有其逻辑来决定用户对路径的访问类型。当用户访问SVN时,应进行身份验证,然后联系授权服务获取访问详细信息-读/写/删除等。这是否可能,以及如何配置SVN来实现这一点。假设授权服务已经可用。

您所说的是什么类型的授权服务。Subversion不进行授权。相反,它将授权传递给另一个服务。您可以使用任何与apachehttpd一起工作的服务(如LDAP和activedirectory)。您还可以使用SASL over
svnserve
连接到其他服务(如LDAP和Active Directory)

这些授权服务中的大多数都是您有权或无权访问Subversion存储库的。也就是说,一旦用户被认证,该用户将具有读/写权限(即,可以读取、签出文件并提交更改)。我有一个与LDAP和activedirectory一起工作的应用程序来控制写访问(即提交访问)。用户仍然可以读取存储库,但不能写入存储库

您可以(通过Subversion本身)通过Subversion本身甚至通过控制预目录访问


但是,如果没有更多的信息(你在谈论什么类型的服务?你想限制什么?你的目标是什么?你需要限制读写还是只写?)很难给你一个更具体的答案。

我实现这一点以控制谁拥有读或读/写访问权限的方法是使用David W.提到的Apache中的本机authzsvnacessfile方法

我驱动的SVN访问文件来自一个单独的进程,该进程定期轮询LDAP

在LDAP中,我定义了一个自定义对象类AuthGroupOfNames,它具有两个属性memberReadmemberWrite,这些属性的设计非常类似于普通的组属性成员

因此,在我的LDAP中,一组特定SVN存储库的条目如下所示:

dn: cn=repo,ou=svn,dc=example,dc=com
cn: repo
objectClass: top
objectClass: AuthGroupOfNames
owner: uid=user1,dc=example,dc=com
description: Example SVN Repository
memberWrite: uid=user1,dc=example,dc=com
memberWrite: uid=user2,dc=example,dc=com
memberRead: uid=user3,dc=example,dc=com
在本例中,用户user1和user2具有读/写访问权限,而user3仅具有读访问权限

SVN服务器上的cronjob定期检查每个已配置存储库的LDAP条目,并相应地重写SVN acl文件。对于本例,acl文件将按如下方式写入:

[repo:/]
user1 = rw
user2 = rw
user3 = r

谢谢你,大卫。我有一个实现树结构的应用程序。它还实现了对树节点的访问控制。SVN中的结构将与应用程序中的树相同。我希望确保SVN使用应用程序实现的相同授权。因此,如果用户对应用程序中的某些树节点具有读取权限,那么SVN还应该限制对该特定路径的读取权限。如果在应用程序中将访问权限修改为读/写,则SVN应自动更改访问权限,而无需手动更新SVN中的任何文件。如果用户甚至没有对节点的读访问权限,则SVN甚至不应向用户显示该路径。因此,当用户通过身份验证时,SVN应该从现有应用程序获取授权信息,并且应该只显示用户至少具有读取权限的路径。当用户尝试提交时,SVN应与应用程序一起检查该用户是否具有写访问权限。重要的一点是,当用户访问权限发生变化时,不需要在这两个位置修改访问详细信息——我的现有应用程序和SVNSVN有自己的内置授权(即您在第3段中描述的每个目录访问)。您在前两段中描述的是通过另一个服务进行身份验证(您就是您所说的那个人)。您正在编写此应用程序吗?您可以让应用程序为您执行授权并与SVN对话。Subversion实现了一个可以合并到应用程序中的API。谢谢David。API名称是什么?我会检查API是否适合我。现有的应用程序已经存在。它可以授权。我正在尝试将该应用程序与SVN集成为一个版本控制repo。应用程序当前将文件存储在blob中,并使用其授权规则控制访问。通过将SVN与应用程序集成,我将把文件移动到SVN而不是BLOB。但是成功最重要的一点是SVN应该与应用程序对话以获得授权。谢谢Liam。我有这个解决方案来定期更新SVN acl文件。但授权逻辑很复杂,无法预先为所有用户创建所有组合。此外,应用程序中的更改和SVN acl更新之间的时间间隔是不可接受的。因此,我正在寻找一种方式,SVN可以向应用程序发送请求,以便在运行时授权用户(而不是进行身份验证)。