Mercurial目录访问规则

时间:2011-08-13 18:15:49

标签: mercurial access-control

我有一个具有以下目录结构的mercurial存储库:

/
/system
/applications
/applications/client1
/applications/client2
/applications/client3

我通过http(还没有ssl)在apache子域上提供repo,并希望限制push,pull和commit的访问权限。一般来说,我不希望有些用户看到目录,也不想看目录的历史记录!

  1. 是否有机会限制对mercurial存储库中目录的访问。
  2. 如何在基于linux的系统上仅为client2提供对client1,client2的客户端1文件夹的访问权限? 注意:如果没有必要,我不想将存储库拆分为子存储库!
  3. 如果这在没有子存储库的情况下不起作用,有人可以告诉我如何使用我的目录结构在子存储库中执行此操作。
  4. 我迷路了:(

2 个答案:

答案 0 :(得分:4)

由于您拥有1个存储库中的所有内容,因此没有。

tl; dr:存储库始终是完整的,如果您可以克隆它,您可以看到所有内容,无法限制对本地克隆内容的访问,只能访问中央服务器托管的克隆。


Mercurial服务器可以通过两种方式处理授权:

  1. 它可以限制对存储库的访问
  2. 它可以使用挂钩来防止推送内容,不允许用户修改
  3. 第一种类型会使整个存储库成为只读或不可用。但是,如果用户具有读访问权限,他将能够克隆并查看整个存储库,历史记录和文件等。

    但是,您可以通过禁止推送来阻止同一用户修改中央副本。这意味着该用户可以使用自己的私有克隆做任何他想做的事情,但他无法将这些更改推回到中央克隆。

    另一种类型允许您控制允许更改的位置更精细一些。但是,请注意,用户将能够克隆并查看整个存储库。

    此外,用户还可以使用自己的个人克隆做任何他想做的事情。但是,对于这种类型的授权,并不完全禁止推送到中央存储库,而钩子会查看正在推送的更改集,并且如果您决定不允许该用户将更改推送到“client2”内容,他试图推动的任何此类变更集都将被中止。

    换句话说,用户可以修改他的私有克隆,包括更改“client2”中的内容,但如果他提交的变更集中有“client2”更改,他将无法返回中央存储库。然后,在他的推动经过之前,他必须脱掉,或以其他方式摆脱那些变化。

    总结一下:

    1. 您可以禁止用户完全克隆,这会使整个存储库无法使用
    2. 您可以禁止推送,但允许克隆
    3. 您可以使用挂钩来分析传入的变更集,并防止更改不允许用户修改的内容
    4. 无论如何,如果用户能够进行克隆,则该克隆在用户计算机上始终完成且不受限制。您无法限制该克隆中的访问权限,您所能做的只是第1点,禁止用户从克隆开始。

答案 1 :(得分:1)

您可以使用ACL Extension,默认情况下现在随Mercurial一起发布。扩展可以限制每个目录的所有Hg操作,不使用使用子存储库。

此外,您可以限制访问 per-branch per-folder