跳转到内容

角色与访问控制

Pier 的授权模型有两个作用域。每位用户都拥有一个全局角色,此外用户还可以在其作为成员的每个项目上拥有一个项目角色。大多数端点会检查其中之一;少数影响重大的端点则保留给 Owner。

全局角色存储在用户记录上,并随每个经过身份验证的请求一同传递。共有三种,按权限从高到低排列。

角色可执行的操作
OwnerAdmin 能做的一切,外加 Owner 专属的控制项:更改其他用户的全局角色、删除/提升 Admin、联邦授权以及 WireGuard 网格。设置时创建的第一个用户即为 Owner。系统始终要求至少有一个活跃的 Owner。
Admin管理用户(邀请、编辑、移除非 Owner 用户)、管理服务器、查看系统指标和审计日志、创建项目,以及操作 Docker 层面的资源(容器、镜像、compose 栈、网络、镜像仓库)。绕过项目成员身份检查 —— Admin 可以访问每个项目。
User普通成员。仅能看到自己明确作为成员的项目,外加只读的全局端点(服务器列表、系统指标)。无法创建项目或管理用户。

全局 OwnerAdmin 都会绕过项目成员身份检查 —— 在每个项目上,他们都被视为项目级 Admin

项目角色通过项目成员身份(project_members 表)授予,将一个 User 的权限范围限定在单个项目内,而不赋予其全局权力。共有三种。

角色在项目内可执行的操作
AdminEditor 能做的一切,外加管理项目成员身份(添加/移除成员、更改其角色)。
Editor部署和重新部署服务、更改环境变量、域名和设置、重启。
Viewer只读:配置、日志、指标和部署历史。

每个项目至少保留一个项目级 Admin:Pier 拒绝降级或移除最后一个 Admin。

有两种机制强制执行角色:

  • 路由级全局守卫。 整组路由位于中间件层之后。require_global_admin 守护用户管理、Docker 守护进程操作、compose 栈、镜像仓库、审计日志和服务器变更。require_global_owner 守护全局角色变更(PUT /users/{id}/role)、网格和联邦授权。
  • 处理器内项目检查。 项目级路由(资源、部署、环境变量、备份)在处理器顶部调用 enforce_project_role / enforce_resource_role,将资源解析到其所属项目并要求达到最低项目角色。

常见操作的简明对照表:

操作最低角色
浏览目录 / 查看某项目的服务Viewer(项目)
部署或重新部署服务、编辑环境变量/域名Editor(项目)
添加或移除项目成员Admin(项目)
创建新项目Admin(全局)
邀请或移除用户、查看审计日志Admin(全局)
将用户提升为 Admin,或更改任何全局角色Owner(全局)
管理联邦授权或 WireGuard 网格Owner(全局)