在我正在使用的appsync api的graphQl模式中,我想根据用户所属的组来限制其用户操作。
根据文档,添加aws_auth(cognito_groups: ["Admins"])
行应将访问权限限制为仅属于“管理员”组的用户。当我从appsync控制台或应用程序本身运行变异时,不会发生这种情况。
我的变异如下:
type Mutation @aws_iam
@aws_cognito_user_pools {
createItem(input: CreateItemInput!): Item
updateItem(input: UpdateItemInput!): Item
@aws_auth(cognito_groups: ["Admins"])
}
@aws_iam和@aws_cognito_user_pools指令似乎工作正常。但是,已通过身份验证或具有IAM角色的任何人仍然可以执行更新,即使他们不属于“管理员”组。
这里发生了什么?是否需要进行其他配置才能使其正常工作?
通常,应避免与@aws_auth
和@aws_cognito_user_pools
同时使用aws_iam
,因为它们的行为略有不同(see docs here)。
如果您想限制对updateItem
的访问,同时仍允许任何IAM身份验证的用户使用createItem
,则可以使用:
type Mutation {
createItem(input: CreateItemInput!): Item
@aws_iam
updateItem(input: UpdateItemInput!): Item
@aws_cognito_user_pools(cognito_groups: ["Admins"])
}
将指令放置在类型上意味着auth config对该类型中的所有字段均有效。将指令放在字段上会使它仅适用于字段。