我们有一些旧的 ADO/VSTS 项目,我们想要将其存档并设为只读。每个项目都有工作项、构建、git 存储库等...
目前我找到的唯一方法都很痛苦。
我用 git repos 尝试了这个,这有一些问题,因为有些 权限不会继承到创建该权限的各个用户 git repo,他们仍然可以签入。
在这里您可以看到我创建了一个 READONLY 组,并将除读取权限之外的所有内容设置为 DENY。 (该组的成员是默认组,例如贡献者、构建管理员、项目管理员)
但是,在创建只读组之前,我有一个由测试用户创建的存储库,并且该用户似乎仍然拥有该存储库的权限
好吧,我明白,如果权限设置在较低级别,那么它们不会从顶级父级继承下来。我可以创建一个脚本来检查每个 git 存储库的用户并将其签入权限设置为拒绝,但这很痛苦,我不想这样做。同样,有些项目有超过 300 个 git 存储库。
仅供参考,我想让整个项目只读,而不仅仅是 git repos。
是的,您已经发现了 Azure DevOps 权限模型的令人讨厌的功能之一。更具体的 ACL 胜过不太具体的 ACL。即使对于拒绝规则。
当更具体的 ACL 上存在显式 ALLOW 规则时,它将覆盖不太具体的 ACL 上的 DENY。
git 的特殊性基于:
其他证券也存在类似的层次结构。
除了编写动作脚本之外,没有简单的方法可以将这些全部删除。
Azure CLI 有一个 devops 扩展,它允许您编写所需的脚本,并可以输出 JSON 以便更轻松地编写脚本。
您可以使用az devops security permission list
列出为身份(组或用户)定义的所有权限,并使用
az devops security permission reset
或
az devops security permission update
取消设置或覆盖给定权限。其他可能需要的电话:
答案之一中解释的另一种方法是使用存储库设置 UI 手动删除任何写入权限。如果您的存储库上有很多访问控制列表,甚至需要在多个存储库上执行此操作,则手动方法可能会变得非常耗时。因此,我编写了一个脚本来自动执行此操作:
https://github.com/ckadluba/RemoveAzureGitRepoWritePermissions。
它基本上是这样工作的。
.\Remove-AzureGitRepoWritePermissions.ps1 -OrgName "myorganisation" -ProjectName "MyProject" -RepoName "MyRepo"
它对以下权限设置显式拒绝:GenericContribute、ForcePush、CreateBranch、CreateTag、ManageNote、PolicyExempt、PullRequestContribute
和 PullRequestBypassPolicy。