IFGAProvider
IFGAProvider interface 定義細粒度授權(FGA)Provider。Mastra 會呼叫它,判斷使用者或系統 actor 是否可對特定資源執行某項權限。實作此 interface,即可將 Mastra 連接至 FGA 後端,例如 WorkOS Authorization。
關於 Mastra 強制執行 FGA 的概念、設定與生命週期階段,請參閱細粒度授權。
使用範例「使用範例」的直接連結
以下範例會實作最小化的 Provider。require 會拋出錯誤以拒絕存取,而 check 會傳回 boolean。
import { FGADeniedError } from '@mastra/core/auth/ee'
import type { FGACheckParams, IFGAProvider, MastraFGAPermissionInput } from '@mastra/core/auth/ee'
class MyFGAProvider implements IFGAProvider {
async check(user: any, params: FGACheckParams): Promise<boolean> {
// Your authorization logic.
return true
}
async require(user: any, params: FGACheckParams): Promise<void> {
if (!(await this.check(user, params))) {
throw new FGADeniedError(user, params.resource, params.permission)
}
}
async filterAccessible<T extends { id: string }>(
user: any,
resources: T[],
resourceType: string,
permission: MastraFGAPermissionInput,
): Promise<T[]> {
return resources
}
}
Method「Method」的直接連結
check(user, params)「checkuser-params」的直接連結
傳回 user 是否擁有該資源的指定權限。可用於不會拋出錯誤的檢查,例如篩選或條件式 UI。
傳回:Promise<boolean>
require(user, params)「requireuser-params」的直接連結
當 user 沒有所需權限時拋出 FGADeniedError。Mastra 會在其強制執行點呼叫此 method。
傳回:Promise<void>
filterAccessible(user, resources, resourceType, permission)「filteraccessibleuser-resources-resourcetype-permission」的直接連結
傳回 resources 中 user 可透過 permission 存取的子集。
傳回:Promise<T[]>
requireActor(actor, params)「requireactoractor-params」的直接連結
授權非使用者的系統 actor,例如自主或排程執行的 Agent。此 method 為選填。
系統 actor 會略過以使用者為中心的 require() 路徑,因此請實作 requireActor,以對它們強制執行個別 Agent 的最小權限。若要拒絕存取,請拋出 FGADeniedError。Provider 未實作 requireActor 時,Mastra 會保留受信任 actor 的繞過機制(通過 tenant 範圍檢查後允許存取),因此新增此 method 仍具向後相容性。
請將 actor.permissions 視為不受信任的 claim。請根據 actor.agentId,從受信任的來源解析 Agent 的正式授權,而不要信任內嵌值。請參閱系統 actor。
import { FGADeniedError } from '@mastra/core/auth/ee'
import type { ActorSignal, FGACheckParams, IFGAProvider } from '@mastra/core/auth/ee'
class MyFGAProvider implements IFGAProvider {
// ...check, require, filterAccessible...
async requireActor(actor: ActorSignal, params: FGACheckParams): Promise<void> {
const agentId = actor === true ? undefined : actor.agentId
// Resolve the agent's authoritative grants from a trusted source keyed by agentId.
const granted = await this.grantsForAgent(agentId)
const required = Array.isArray(params.permission) ? params.permission : [params.permission]
if (!required.some(permission => granted.includes(permission))) {
throw new FGADeniedError(null, params.resource, params.permission)
}
}
}
傳回:Promise<void>
設定屬性「設定屬性」的直接連結
選填屬性可控制路由涵蓋範圍與啟動驗證。
requireForProtectedRoutes?:
auditProtectedRoutes?:
resolveRouteFGA?:
validatePermissions?:
參數「參數」的直接連結
傳遞給 check、require 和 requireActor 的 params 引數。
resource:
permission:
context?:
ActorSignal「actorsignal」的直接連結
識別由受信任的非使用者 actor(而不是通過身分驗證的終端使用者)所發出的呼叫。它可以是 true(匿名系統的簡寫),也可以是命名執行中 Agent 並帶有 Provider 可強制執行之授權的物件。
actorKind:
agentId?:
permissions?:
scope?:
sourceWorkflow?:
FGADeniedError「fgadeniederror」的直接連結
授權檢查遭拒時拋出。require 和 requireActor 會拋出此錯誤以拒絕存取,而 Mastra 會將其呈現為 HTTP 403。
import { FGADeniedError } from '@mastra/core/auth/ee'
throw new FGADeniedError(user, { type: 'agent', id: 'reporter' }, 'agents:execute')
// Optional fourth argument: a reason string included in the error message.