はじめに
こんばんは。
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>
終わりに
最近勉強が全然出来てないので、ブログもおざなりになってきました。
勉強ができないくらい忙しいというわけではなく、モチベーションが上がってないという感じです。
ちょっと自己啓発的な本読んで、危機感とモチベーションを高めたいので、なにかおすすめ本あれば教えて下さい。
現場からは以上です。