Политики Laravel с отношениями "многие ко многим"

Роль и Разрешение - это две модели, и, поскольку они имеют отношение "многие ко многим", у меня есть промежуточная таблица с именем permission_role table. Но у этого нет Модели. Я пытаюсь привязать разрешение к роли. Но $this->authorize('create', RolePermission::class); всегда выдает ошибку "This action is unauthorized."

Маршрут:

Route::post('/rolepermissions/{role}/addpermission', 'RolePermissionController@store')
       ->name('rolepermission.store');

RolePermissionController:

public function store(StoreRolePermission $request, Role $role)

{
    $this->authorize('create', RolePermission::class);

    ...
}

RolePermissionPolicy:

public function create(User $user)
{
    if (($user->usertype == 'ADMIN') || ($user->usertype == 'SUPERADMIN'))
    {
        return true;
    }
    else
    {
        return false;
    }
}

Это потому, что промежуточная таблица не имеет связанной модели?


person Lakmal Premaratne    schedule 17.02.2018    source источник
comment
Вы это решили?   -  person rebellion    schedule 28.03.2018


Ответы (1)


У меня был похожий сценарий, и я делаю:

Auth:user()->can('create', RolePermission::class); вместо авторизации.

Я думаю (не тестировал) вы также можете:

$this->authorize('create', [RolePermission::class, Auth::user()]). Второй аргумент в массиве будет передан как единственный параметр в вашей политике.

Я новичок в Laravel, мне помогли решить аналогичную проблему, надеюсь, это сработает для вас.

person Diego Ferreyra    schedule 27.07.2018