# 关于 GitHub Packages 的权限

了解如何管理包的权限。

包的权限可以将范围限定为用户、组织或存储库。

## 用户/组织作用域包的精细权限

具有精细权限的包仅限于个人帐户或组织。 您可以从与包相连（或链接）的仓库分别更改包的访问控制和可见性。

以下 GitHub Packages 注册表支持精细权限。

* Container registry

## 仓库作用域包的权限

存储库范围的包会继承发布包的存储库的权限和可见性。 通过转到存储库的主页并单击页面右侧的“包”链接，可以找到范围限定为存储库的包。

以下 GitHub Packages 注册表 **仅** 支持存储库范围的权限。

* Docker 注册表 （`docker.pkg.github.com`）
* npm 注册表 <!-- markdownlint-disable-line GHD034 -->
* Apache Maven 注册表
* Gradle 注册表
* NuGet 注册表
* RubyGems 注册表

Container registry对于，可以选择允许将包限定为用户或组织，或链接到存储库。
有关迁移到 Container registry 的信息，请参阅 [从 Docker 注册表迁移到容器注册表](/zh/enterprise-server@3.22/packages/working-with-a-github-packages-registry/migrating-to-the-container-registry-from-the-docker-registry)。

## 包的可见性和访问权限

如果包属于支持粒度权限的注册表，对包具有管理员权限的任何人都可以将包设置为专用或公共，并且可以授予对包的访问权限，这些权限不同于在组织和存储库级别设置的权限。 有关支持精细权限的注册表的列表，请参阅 [关于 GitHub Packages 的权限](/zh/enterprise-server@3.22/packages/learn-github-packages/about-permissions-for-github-packages#granular-permissions-for-userorganization-scoped-packages)。

在大多数注册表中，若要拉取包，必须使用 personal access token 或 `GITHUB_TOKEN` 进行身份验证，无论该包是公共包还是专用包。 但是，在 Container registry 中，公共包支持匿名访问，无需身份验证或通过 CLI 登录即可进行拉取。

你发布包时，会自动获取对包的管理员权限。 如果将包发布到组织，则组织中具有 `owner` 角色的任何人也会获得包的管理员权限。

对于范围限定为个人帐户的包，可以授予任何人访问角色。 对于范围限定为组织的包，可以为组织中的任何人或团队授予访问角色。

如果使用 GitHub Actions 工作流来管理包，可以通过 通过“Actions 访问”\*\*\*\* 菜单选项执行操作 向存储工作流的存储库授予访问角色。 有关详细信息，请参阅“[配置包的访问控制和可见性](/zh/enterprise-server@3.22/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-workflow-access-to-your-package)”。

| 权限  | 访问说明                                             |
| --- | ------------------------------------------------ |
| 读取  | 可以下载包。 <br> 可以读取包元数据。                            |
| 写入  | 可以上传和下载此包。 <br> 可以读取和写入包元数据。                     |
| 管理员 | 可以上传、下载、删除和管理此包。 <br> 可以读取和写入包元数据。 <br> 可以授予包权限。 |

> \[!NOTE]
> GitHub Actions 工作流使用 REST API 删除和还原包的功能目前为 公开预览，可能随时更改。

有关详细信息，请参阅“[配置包的访问控制和可见性](/zh/enterprise-server@3.22/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility)”。

## \*\*

有关软件包注册表的范围和权限

> \[!NOTE]
> GitHub Packages 仅支持使用 personal access token (classic) 进行身份验证。 有关详细信息，请参阅“[管理个人访问令牌](/zh/enterprise-server@3.22/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)”。

若要使用或管理由包注册表托管的包，必须使用 personal access token (classic) 具有相应作用域的包，并且个人帐户必须具有适当的权限。

例如：

* 若要从存储库下载和安装包， personal access token (classic) 必须具有 `read:packages` 作用域，并且用户帐户必须具有读取权限。
* 若要删除包，您的 personal access token (classic) 必须至少具有 `delete:packages` 和 `read:packages` 作用域。 有关详细信息，请参阅“[删除和恢复包](/zh/enterprise-server@3.22/packages/learn-github-packages/deleting-and-restoring-a-package)”。

| Scope             | 说明                         | 必需的权限 |
| ----------------- | -------------------------- | ----- |
| `read:packages`   | 从 GitHub Packages 下载并安装软件包 | 读取    |
| `write:packages`  | 将包上载并发布到 GitHub Packages   | 写入    |
| `delete:packages` | 从 GitHub Packages 删除包      | 管理员   |

> \[!NOTE]
> GitHub Actions 工作流使用 REST API 删除和还原包的功能目前为 公开预览，可能随时更改。

创建 GitHub Actions 工作流时，您可以使用 `GITHUB_TOKEN` 在 GitHub Packages 中发布、安装、删除和还原包，而无需存储和管理 personal access token。

有关详细信息，请参阅：

* [使用 GitHub Actions 发布和安装包](/zh/enterprise-server@3.22/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions)
* [管理个人访问令牌](/zh/enterprise-server@3.22/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)
* [OAuth 应用的范围](/zh/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes)

## 关于仓库转让

可以将存储库转移到其他个人帐户或组织。 有关详细信息，请参阅“[转让仓库](/zh/enterprise-server@3.22/repositories/creating-and-managing-repositories/transferring-a-repository)”。

传输存储库时， GitHub 可能会根据包所属的注册表传输与存储库关联的包。

* 对于支持精细权限的注册表，包的范围限定为个人帐户或组织，并且与包关联的帐户在转移存储库时不会更改。 如果已将包链接到存储库，则在将存储库传输给另一个用户时会删除该链接。 与存储库关联的任何 GitHub Actions 工作流都将失去对包的访问权限。 如果包从链接的存储库继承了其访问权限，则用户将失去对包的访问权限。 有关这些注册表的列表，请参阅上面的[用户/组织范围包的精细权限](#granular-permissions-for-userorganization-scoped-packages)。
* 对于仅支持存储库范围权限的注册表，包将直接发布到存储库，并将 GitHub 与存储库关联的包作为存储库传输的一部分传输。 与包关联的所有可计费使用量随后都会向存储库的新所有者计费。 如果以前的存储库所有者作为存储库上的协作者被删除，他们可能无法再访问与存储库关联的包。 有关这些注册表的列表，请参阅上面的[存储库范围的包的权限](#permissions-for-repository-scoped-packages)。

## 维护对工作流中 GitHub Actions 包的访问

若要确保工作流将维护对包的访问权限，请确保在工作流中使用正确的访问令牌，并且 GitHub Actions 已启用对包的访问权限。

有关在 GitHub Actions 工作流中使用包的更多概念背景或示例，请参阅 [使用 GitHub Actions 工作流程管理 GitHub Packages](/zh/enterprise-server@3.22/packages/managing-github-packages-using-github-actions-workflows)。

### 访问令牌

> \[!NOTE]
> GitHub Actions 工作流使用 REST API 删除和还原包的功能目前为 公开预览，可能随时更改。

* 要发布、安装、删除和还原与工作流存储库相关联的包，请使用 `GITHUB_TOKEN`。
* 若要安装与其他无法访问的专用存储库 `GITHUB_TOKEN` 关联的包，请使用 personal access token (classic)

有关在 `GITHUB_TOKEN` 工作流中使用的 GitHub Actions 的详细信息，请参阅 [在工作流中使用 GITHUB\_TOKEN 进行身份验证](/zh/enterprise-server@3.22/actions/tutorials/authenticate-with-github_token#using-the-github_token-in-a-workflow)。