要根据不同类型的用户定义验证规则,您可以使用AWS Amplify和GraphQL的联合。下面是一个示例解决方案,其中包含代码示例:
npm install -g @aws-amplify/cli
amplify configure
amplify init
amplify/backend/api//schema.graphql 文件中添加以下内容:type User @model @auth(rules: [{ allow: owner, ownerField: "userId", operations: [create, update, delete] }]) {
id: ID!
username: String!
email: String!
userType: UserType!
userId: String
}
enum UserType {
ADMIN
MODERATOR
USER
}
amplify push
amplify/backend/api//resolvers/..req.vtl 的文件,并根据需要更改和。例如,要根据用户类型验证createUser操作,请创建amplify/backend/api/文件,并将以下代码添加到文件中:
#if( $ctx.args.input.userType == "ADMIN" && $ctx.identity.claims["custom:userType"] != "ADMIN" )
$util.error("Only users with ADMIN userType can create ADMIN users")
#end
#if( $ctx.args.input.userType == "MODERATOR" && $ctx.identity.claims["custom:userType"] != "ADMIN" && $ctx.identity.claims["custom:userType"] != "MODERATOR" )
$util.error("Only users with ADMIN or MODERATOR userType can create MODERATOR users")
#end
#if( $ctx.args.input.userType == "USER" && $ctx.identity.claims["custom:userType"] != "ADMIN" && $ctx.identity.claims["custom:userType"] != "MODERATOR" && $ctx.identity.claims["custom:userType"] != "USER" )
$util.error("Only users with ADMIN, MODERATOR, or USER userType can create USER users")
#end
$util.toJson($ctx.args)
amplify push
import React, { useEffect } from 'react';
import { API, graphqlOperation } from 'aws-amplify';
import { createTodo } from './graphql/mutations';
import { listTodos } from './graphql/queries';
const App = () => {
useEffect(() => {
const createTodoItem = async () => {
try {
const todoDetails = {
name: 'My Task',
description: 'This is my task',
};
const response = await API.graphql(graphqlOperation(createTodo, { input: todoDetails }));
console.log('Created todo:', response.data.createTodo);
} catch (error) {
console.log('Error creating todo:', error);
}
};
const listTodoItems = async () => {
try {
const response = await API.graphql(graphqlOperation(listTodos));
console.log('List of todos:', response.data.listTodos.items);
} catch (error) {
console.log('Error listing todos:', error);
}
};
createTodoItem();
listTodoItems();
}, []);
return (
AWS Amplify and GraphQL Example
);
};
export default App;
请注意,此示例中的createTodo和listTodos是自动生成的GraphQL操作,可在您的项目中的相应文件中找到。
这样,您就可以使用AWS Amplify和GraphQL根据不同类型的用户定义验证规则。确保根据您的项目需求和用户类型更改验证规则和代码示例。