laravel-permissionでguardつきroleをアサインする

たまには(すんげぇピンポイントな)技術ネタを。

一般的にLaravel-permissionsを用いてdb:seedを行う際、Seederの中でassignRoleする方法は、以下の通り。

        $user = User::create([
'name' => '社長',
'email' => '[email protected]',
'password' => Hash::make('owner'),
]);
$user->assignRole('owner');

この辺とか参考に。

なんですけど、assignRole関数はguardを受け取らない仕様になっている。(2019/02現在)

これでは、guardを使って例えばAPI経由の時だけパーミッション参照させたい場合などに困る。

この辺とか この辺の実装を見てみると、getDefaultGuardName()でデフォルトの奴しか参照してない。ダメだこりゃ。

正解としては、このIssueの通りなんだけど、本当に最低限(チェックとか省いた)バージョンは以下でいいのかなと思います。

    $roles = app(Role::class)->findByName('owner', 'apiguard');
$user->roles()->saveMany($roles);
$user->forgetCachedPermissions();

roleとかguardの存在確認とか省いてしまっているので、ご参考程度までに。

Laravel使い始めて5ヶ月ほどですけど、ほんと内部のソース読み込まないと使いこなせませんね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です