入门
如果您想观看视频,可以从这段视频介绍开始:
注:本视频是在 2022 年 1 月的贡献者会议上使用
@backstage/[email protected]
录制的。演示的某些方面可能在以后的版本中有所改变。
Backstage集成商通过编写策略来控制权限。 通俗地说,策略只是一个异步函数,它接收对用户和(可选)资源的特定操作进行授权的请求,并返回是否授权该权限的决定。 集成商可以从头开始实施自己的策略,也可以采用他人编写的可重复使用的策略。
先决条件
权限框架依赖于其他几个Backstage系统,在我们深入编写策略之前,必须先设置好这些系统。
升级到最新版本的 Backstage
权限框架本身是Backstage的新功能,而且仍在快速发展中。 为确保您的Backstage版本拥有所有与权限相关的最新功能,升级到最新版本非常重要。升级Backstage助手是一个很好的工具,可以帮助确保您在升级过程中进行了所有必要的更改!
启用服务对服务身份验证
服务对服务身份验证允许 Backstage 后端代码验证给定请求是否来自 Backstage 后端的其他地方。 这对于在搜索索引中整理目录实体等任务非常有用。 这种类型的请求不应该有权限,因此在尝试使用权限框架之前配置此功能非常重要。
要设置服务对服务身份验证,请按照服务对服务身份验证文档.
提供身份解析器,以便在登录时填充组员身份
注身份解析器:如果您使用的是现有的Backstage实例,您可能已经设置了某种形式的身份解析器。
与 Backstage 的许多其他部分一样,权限框架也依赖于群组成员的信息。 这就通过使用群组简化了策略的编写,而不是要求在配置中列出每个用户。 群组成员资格对于条件权限也很有用,例如,当用户是拥有某个实体的群组成员时,允许授予对该实体采取行动的权限。
IdentityResolver 文档描述在登录时解析组员身份的过程。
可选添加基于 cookie 的身份验证
浏览器发起的资产请求不会在Authorization
如果这些请求通过权限框架检查授权(如 TechDocs 等插件),则需要设置基于 cookie 的身份验证。 请参考"验证 API 请求"教程,演示如何实现这一行为。
将权限框架与Backstage实例相 结合
1.设置权限后端
权限框架使用新的permission-backend
Backstage默认不包含此权限后端,因此需要添加:
- Add
@backstage/plugin-permission-backend
as a dependency of your Backstage backend:bash # From your Backstage root directory yarn add --cwd packages/backend @backstage/plugin-permission-backend
2. Add the following to a new file,packages/backend/src/plugins/permission.ts
. This adds the permission-backend router, and configures it with a policy which allows everything. ```typescript title="packages/backend/src/plugins/permission.ts" import { createRouter } from '@backstage/plugin-permission-backend'; import { AuthorizeResult, PolicyDecision, } from '@backstage/plugin-permission-common'; import { PermissionPolicy } from '@backstage/plugin-permission-node'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; class TestPermissionPolicy implements PermissionPolicy { async handle(): Promise{ return { result: AuthorizeResult.ALLOW }; } } export default async function createPlugin( env: PluginEnvironment, ): Promise { return await createRouter({ con
2. 启用并测试权限系统
现在权限后端已经运行,是时候启用权限框架并确保其正常工作了。
- Set the property
permission.enabled
totrue
inapp-config.yaml
.yaml title="app-config.yaml" permission: enabled: true
2. Update the PermissionPolicy inpackages/backend/src/plugins/permission.ts
to disable a permission that’s easy for us to test. This policy rejects any attempt to delete a catalog entity: ```ts title="packages/backend/src/plugins/permission.ts" import { createRouter } from '@backstage/plugin-permission-backend'; import { AuthorizeResult, PolicyDecision, } from '@backstage/plugin-permission-common'; /* highlight-remove-next-line / import { PermissionPolicy } from '@backstage/plugin-permission-node'; / highlight-add-start / import { PermissionPolicy, PolicyQuery, } from '@backstage/plugin-permission-node'; / highlight-add-end / import { Router } from 'express'; import { PluginEnvironment } from '../types'; class TestPermissionPolicy implements PermissionPolicy { / highlight-remove-next-line / async handle(): Promise{ / highlight-add-start */ async h
现在,框架已完全配置完毕,您可以利用所提供的授权方法或以下方法制定最适合贵组织的权限策略制定自己的政策!