はじめに
こんばんは。
Laravel-Permissionを使用している状態でLaravel + Inertia環境下で、RoleやPermissionを送るための方法を備忘録で残しておきます。
本題
方法は簡単で、HandleInertiaRequests でグローバルに送るのがよさそうです。
<?php namespace App\Http\Middleware; use App\Http\Resources\AuthResource; use App\Models\User; use Illuminate\Http\Request; use Inertia\Middleware; class HandleInertiaRequests extends Middleware { public function share(Request $request): array { /** @var User|null $user */ $user = $request->user(); return array_merge(parent::share($request), [ 'auth' => [ 'user' => $user ? new AuthResource($user) : null, // ↓これ↓ 'can' => [ 'permissions' => $user ? $user->getAllPermissions()->pluck('name') : [], 'roles' => $user ? $user->roles()->pluck('name') : [] ] ], ]); } }
Inertia側はv-ifとかで判定すればOK
例えばパーミッションとかなら以下
<script>
import { usePage } from "@inertiajs/vue3";
const hasPermission = (permission: string | string[]): boolean => {
const can = usePage().props.auth.can;
if (!Array.isArray(permission)) {
return can.permissions.indexOf(permission) !== -1;
}
let result = false;
permission.map((p) => {
if (can.permissions.indexOf(p) !== -1) {
result = true;
}
});
return result;
};
</script>
<template>
<div>
<p v-if="hasPermission('blog.write')">みえるよ</p>
<p v-else>みえないよ</p>
</div>
</template>
終わりに
最近勉強が全然出来てないので、ブログもおざなりになってきました。
勉強ができないくらい忙しいというわけではなく、モチベーションが上がってないという感じです。
ちょっと自己啓発的な本読んで、危機感とモチベーションを高めたいので、なにかおすすめ本あれば教えて下さい。
現場からは以上です。