Laravel-adminの投稿画面で記事のIDを取得する方法

Laravel-admin のバージョンが上がり、form メソッドの引数に記事 ID が渡らなくなりました。

(少なくとも 1.8 から。もっと以前のバージョンで既にそうなっているかもしれません)

そこで、記事の ID を取得する方法です。

私のケースでは、他の投稿者の記事を編集できないように制御したかったです。

ID を取得するには、記事のパスが article だった場合

request()->route()->parameters['article']

で取得できます。

また、他の投稿者の記事を編集しようとした場合に 404 に飛ばしたければ

記事のテーブルに admin_user_id のカラムを用意して

form メソッドの先頭とかで

if ($form->isEditing()) {
    $articleId = request()->route()->parameters['article'];
    $thisArticleAdminUserId = Article::where('id', $articleId)->first()->admin_user_id;

    if ($thisArticleAdminUserId !== Admin::user()->id) {
        abort(403);
    }
}

とすることで制御することができます。

また、そもそも一覧(grid)に表示しない場合は

grid の先頭とかで

$grid->model()->where('admin_user_id', '=', Admin::user()->id);

とすることで、一覧には自分が投稿した記事しか表示されないようにできます。

- PR -