创建Gerrit项目 - 获得权限,无法访问它

时间:2017-12-08 17:57:48

标签: permissions gerrit

问题问题 Gerrit 2.14

目标

我希望只有注册用户可以看到项目,而且我希望那个'所有者'项目可以设置它的可见性,共享,隐藏等没有管理员权限,或者让管理员为每个项目设置他/她的权限。例如,我希望项目A,B,C,D,E与B,C由p1拥有,C在p1,p2之间共享。因此,用户p1将看到B,C,而用户p2将看到C。

我检查了什么

我相信有三种方法可以实现上述目标:

  • 用户拥有管理员权限 - 可以设置除项目以外的项目的父项:我不想要
  • admin可以为用户/组设置每个项目的ACL:我不想要
  • 用户成为他/她创建的项目的项目所有者

默认情况下"创建项目"未授予注册用户和" READ for refs / *"

我试过

All-Projects.git 中设置所有项目继承的权限

Create Group
  Registered Users    
Create Project
  Registered Users

Reference: refs/*
  Allow Administrators
  Allow Project Owners
  Deny  Anonymous Users
  /* IF I add ALLOW Registered Users here -> see bottom of question */

并且所有剩余的权限都保持不变,我希望能够作为注册用户:

  1. 确保匿名(未注册/登录)用户无法查看项目
  2. 使用GUI和SSH创建项目
  3. 被指定为该项目的项目所有者 - 完全控制该单个项目
  4. 结果

    不幸的是,注册用户可以创建项目(如果用户没有选择以前准备的父All-public-projects - 它授予多个其他权限 - 默认All-projects被指定为父级)但是用户,应该是项目所有者无法访问此项目。

    想法有什么不对

    我知道注册用户也是匿名用户组的成员,但是documentation

      

    除非将它们定义为BLOCK规则,否则可以覆盖继承的访问权限。 BLOCK规则用于限制项目所有者继承项目的可能性。

         

    只允许Gerrit管理员更改项目的父级。这意味着如果要重新显示项目,则需要联系Gerrit服务器的管理员。

    以及

      

    [READ]此类别具有特殊行为,其中在全局所有项目ACL之前评估每个项目的ACL。如果每个项目的ACL已授予Read with' DENY',并且不以其他方式授予Read with' ALLOW',则忽略所有项目ACL中的Read。此行为对于在其他公共服务器上隐藏少数项目非常有用。

         

    对于开源公共Gerrit安装,通常在All-Projects ACL中向Read Anonymous Users授予Read,允许随意浏览任何项目的更改,以及通过SSH或HTTP获取任何项目的存储库。通过向“DENY”提供“阅读”,可以暂时将新项目隐藏在公众视野之外。匿名用户并在每个项目ACL中授予对项目所有者组的读取权。

    既然我想要为每个项目设置权限,我是否认为失败的原因是

      

    对于All-Projects根项目,任何所有者都可以访问' refs / *'被忽略,因为此权限允许用户编辑全局功能,这与能够管理Gerrit服务器相同(例如,用户可以将管理员服务器功能分配给自己的帐户)。

    问题

    如果我的推理是正确的,我该如何实现目标?

    此外,向注册用户授予READ refs / *可以访问项目,也可以访问所有其他项目。那么我怎样才能隐藏其他注册用户的一些项目?或者,如果不可能 - 如何配置权限以防止其他注册用户提交,甚至可能克隆其他项目?

    其他问题。 如何快速查看谁被设置为项目的项目所有者?

1 个答案:

答案 0 :(得分:0)

我很高兴看到不是唯一有这种要求的人。对我来说,如果通过Gerrit的Web UI创建项目的用户将自动成为项目所有者(仅当用户不是和管理员用户)时,一切都会正常工作。但是,如您所知,当前的Web UI既不会将此信息传递给Gerrit后端,也不允许在创建新项目时分配项目所有者。我看到以下选项:

  1. 为Gerrit开发团队打开一个功能请求,希望他们考虑这个想法
  2. 使用create-project REST API并传递项目所有者以创建项目,即使用自己的应用
  3. 使用create project CLI并传递项目所有者以创建项目
  4. 实施自己的Gerrit Plugin - see 2. Plugin Development,这将使当前用户创建项目所有者的新项目
  5. 对我来说,只有选项1或4是可行的,因为另一个意味着太多的开销。我正在考虑编写这样一个插件,我会把它变成开源...大约2个月前,我希望有一些我可以使用的东西,但我找不到任何东西。

    关于第二个问题:我通常使用Web UI来转到项目的访问标签,然后检查谁拥有权限“所有者”分支引用/ *