Nhảy tới nội dung

Persist application state

Persist application state sẽ giúp việc đồng bộ cấu hình giữa application của bạn với Hasura metadata (ví dụ: remote schema permissions roles, inherited roles, remote schema SDL), việc đồng bộ này sẽ giúp đảm bảo tính consistent giữa application với Hasura.

Để persist application state bạn cần thực thi command sau:

php artisan hasura:metadata:persist-state

Command trên sẽ persist application state giúp bạn.

Cách thức hoạt động

Giả sử như application của bạn có mutation field registration dành cho anonymous như sau:

app/Http/GraphQL/RegistrationMutation/Resolver.php
namespace App\Http\GraphQL\RegistrationMutation;

use App\Models\User;
use Hasura\GraphQLiteBridge\Attribute\Roles;
use Hasura\Laravel\GraphQLite\Attribute\ValidateObject;
use Illuminate\Support\Facades\Hash;
use TheCodingMachine\GraphQLite\Annotations as GQL;

class Resolver
{
#[GQL\Mutation(name: 'registration', outputType: 'registration_output')]
#[ValidateObject(for: 'input')]
#[Roles('anonymous')]
public function __invoke(Input $input): User
{
$user = new User();
$user->name = $input->name;
$user->email = $input->email;
$user->password = Hash::make($input->password);
$user->saveOrFail();

return $user;
}
}

inherited roles như sau:

config/hasura.php
'auth' => [
'inherited_roles' => [
'admin' => ['manager', 'user'],
'manager' => ['user']
],
]

Để persist các application state trên lên Hasura metadata thì bạn cần thực thi Artisan console command sau:

php artisan hasura:metadata:persist-state

Sau khi persist xong ngay bây giờ bạn hãy thử kiểm tra lại application remote schema permissions trên Hasura sẽ thấy kết quả sau:

remote schema permissions

Và tiếp đến hãy thử kiểm tra inherited roles trên Hasura sẽ thấy kết quả sau:

inherited roles

Vậy là bạn đã hoàn tất việc persist application state lên Hasura rồi đấy.