您好,我在 amplify studio 中的用户管理下添加了一个组管理员,并向该组添加了一个用户。如果当前经过身份验证的用户是否在组中,我现在可以在代码中访问哪里?
在前端(react)你可以看一下
cognito:groups
。下面的代码片段。
请记住,任何人都可以在前端授予自己“管理员”权限,因此请确保后端 CRUD 操作是确定某人是否在组中的事实来源。例如在代码中硬编码“isAdmin = true”,然后以非管理员用户身份登录,并确保所有错误都正确显示,并且您不能执行任何恶意行为。
export const AppRoutes = ({ user, signOut }: { user: AmplifyUser, signOut: (data?: Record<string | number | symbol, any> | undefined) => void }) => {
const groups: Array<string> = user.getSignInUserSession()?.getAccessToken().payload["cognito:groups"] || []
const isAdmin = -1 !== groups.findIndex(group => group === "ROLE_ADMIN")
// You do you...
在后端,如果您使用的是基于 Lambda 的 GraphQL 解析器,则可以从前端请求中获取
authorization
标头,并将其作为后端 AppSync 和其他 API 的 authorization
标头传递调用,以便它们将以与登录用户相同的权限执行。 (或者,您可能希望 sts:AssumeRole
以便整个 lambda 在该登录用户的权限范围内运行。)
您可以从传递到 Lambda 处理程序的上下文中获取 auth 标头。它是以下代码片段中的
ctx
:
const recipients = await getRecipients({
authorization: ctx.request?.headers.authorization,
audience: ctx.arguments.audience,
username: ctx.identity?.username
})