Права на редактирование своего магазина

Использую laravel-admin при добавлении магазина хочу чтобы каждый редактировал свой магазин.

При отображении сделал так чтобы отображались только их магазины но когда к примеру user12 переходит по ссылке на редактирование поста gameshop/main/stores/8/edit который был создал admin пользователь user12 имеет доступ на редактирование удалени...

Как сделать чтобы каждый пользователь мог редактировать только свой магазин ? ShopsController: <?php

namespace App\Admin\Controllers;

use App\Models\Shops;
use App\Models\Games;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Grid;
use Encore\Admin\Show;
use App\Models\User;
use Request;

use DB;
class ShopsController extends AdminController
{
    /**
     * Title for current resource.
     *
     * @var string
     */
    protected $title = 'Магазины';

    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        $grid = new Grid(new Shops());
        if(!Admin::user()->isAdministrator())
        $grid->model()->where('user_id', Admin::user()->id);

        $grid->column('id', __('ID'));
        if(Admin::user()->isAdministrator())
        {
            $grid->column('user_id', trans('admin.user_name'))->display(function ($userid) {
            return Admin::user()->find($userid)->username;
        })->label();
        }
        $grid->column('game', trans('admin.game'))->display(function ($gameid) {
            return Games::find($gameid)->name;
        })->label();

        $grid->column('shop_name', trans('admin.shop_name'))->editable();
        $grid->column('created_at', __('Created at'));
        $grid->disableExport();
        $grid->actions(function (Grid\Displayers\Actions $actions) {
            $actions->disableView();
        });
        return $grid;
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     * @return Show
     */
    protected function detail($id)
    {
        $show = new Show(Shops::findOrFail($id));

        $show->field('id', __('ID'));
        $show->field('game', trans('admin.game'))->as(function ($gameid) {
            return Games::find($gameid)->name;
        })->label();
        $show->field('shop_name', trans('admin.shop_name'));
        $show->field('created_at', __('Created at'));
        return $show;
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        $form = new Form(new Shops());
        $usershops = DB::table('shops')->where('user_id',Admin::user()->id)->pluck('id')->toArray();
        $form->hidden('user_id')->default(Admin::user()->id);
        $form->select('game', trans('admin.game'))->options(function () {
        $games = Games::where('active', 1)->get();
        $games_all = [];
        foreach($games as $game)
        {
            $games_all += [$game->id => $game->name];
        }
        return $games_all;
        });
        $form->text('shop_name', trans('admin.shop_name'));
        return $form;
    }
}

routers.php

$router->resource('stores', ShopsController::class);

База данные введите сюда описание изображения

Картинки введите сюда описание изображения введите сюда описание изображения


Ответы (2 шт):

Автор решения: Дмитрий

Добавьте проверку где id владельца магазина == auth()->id();

→ Ссылка
Автор решения: Шоха Назаров

Проблема решается таким образом При каждой регистрации пользователя выдаем ему отдельную пермиссию(доступ) http_path Добавляя его в admin_premissions Далее при каждом создании магазина выдаем ему доступ только к своим магазинам /store/3 /store/4

А также выдаем роль котором стандартные пермиссии /store/create /main/ ...

→ Ссылка