Azure DevOps 使项目只读

13
我们有一些旧的ADO/VSTS项目需要归档并设置为只读。每个项目都有工作项、构建、git仓库等。
目前我找到的唯一方法都很麻烦。
1. 删除除只读组以外的所有组,并将用户添加到其中。这太繁琐和耗时了,我们有超过300个项目要设置为只读。 2. 创建一个新组,然后添加其他组(例如proj管理员、贡献者等),然后将此组添加到顶层区域/git仓库路径,并将所有权限设置为拒绝。 > 我尝试了在git仓库中使用此方法,但存在一些问题,因为某些权限未被继承到创建git仓库的个人用户,他们仍然能够进行checkin操作。
在这里,您可以看到我创建了一个READONLY组,并将所有内容设置为拒绝,除了读取权限。(该组的成员是默认组,例如贡献者、构建管理员、proj管理员)

enter image description here

然而,在我创建只读组之前,一个测试用户创建了一个仓库,这个用户似乎仍然有权限访问该仓库。

enter image description here

我知道,如果权限设置在较低级别,则不会从顶级父级继承。我可以创建一个脚本来检查每个git仓库的用户并将其签入权限设置为拒绝,但这很痛苦,我宁愿不这样做。同样,有些项目有超过300个git仓库。

顺便说一下,我想让整个项目只读,而不仅仅是git仓库。

3个回答

8

是的,您发现了Azure DevOps权限模型中讨人厌的特性之一。更具体的ACL优先于不太具体的ACL,即使是DENY规则。

当较为具体的ACL上存在明确的ALLOW规则时,它将覆盖较不具体的ACL上的DENY。

对于git而言,具体性基于以下内容:

  1. 服务器(仅限TFS)
  2. 组织/项目集合
  3. 项目
  4. 默认存储库设置
  5. 特定存储库设置
  6. 分支文件夹设置(仅可通过API设置)
  7. 特定分支设置

其他可安全性设备也有类似的层次结构。

除了脚本操作,没有简单的方法来删除这些内容。

Azure CLI有一个devops扩展,允许您对想要的内容进行脚本操作,并且可以输出JSON以便于进行更轻松的脚本操作。

您可以使用az devops security permission list来列出针对身份(组或用户)定义的所有权限,以及az devops security permission resetaz devops security permission update来取消或覆盖给定的权限。

其他可能需要的调用:


@jesshouwing,所以我必须遍历每个项目和每个git仓库,为每个用户(明确存在的)更新权限,这一切都要在脚本中完成。这很痛苦:(。 - james
你可以列出所有明确设置的对象,这样你就不必迭代所有可能的安全对象了。 - jessehouwing

7
Azure DevOps 现在有一个名为“禁用仓库”的功能。

禁止访问代码仓库(包括构建、拉取请求等),但可以通过警告保留仓库的可发现性。

这意味着您的代码仓库将不允许提交,即使是构建和流水线也不能使用它。只需进入 DevOps 的"项目设置",滚动到"仓库"菜单,然后选择要禁用的仓库即可。

enter image description here


4
不错的功能,但不幸的是,这会破坏对存储库的所有访问。你甚至无法阅读它。任何工作项链接到其中的提交将显示为“无法访问”。 - Joe

0

你可以使用Azure DevOps禁用存储库选项,但这样做的缺点是该存储库将不再显示在项目的存储库列表中。如果代码仍然需要可读性以供参考,这可能不是期望的结果。

另一种方法是根据存储库设置界面手动删除所有写入权限,但如果你的存储库有很多访问控制列表,或者需要在多个存储库上执行此操作,手动方法可能会耗费大量时间。因此,我编写了一个脚本来自动化此过程:https://github.com/ckadluba/RemoveAzureGitRepoWritePermissions

它的工作原理基本如下。

.\Remove-AzureGitRepoWritePermissions.ps1 -OrgName "myorganisation" -ProjectName "MyProject" -RepoName "MyRepo"

它为权限设置了明确的拒绝:GenericContribute、ForcePush、CreateBranch、CreateTag、ManageNote、PolicyExempt、PullRequestContribute和PullRequestBypassPolicy。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接