Я хочу авторизовать мой API моего приложения Laravel.
Моя структура сейчас такая:
Пользователи принадлежат организации, и у организации есть много (скажем, объектов).
Теперь я хочу, чтобы только пользователи могли просматривать / редактировать / создавать / удалять объекты, принадлежащие организации, частью которой они являются.
Мой маршрут API для просмотра объектов:
Route::get('organizations/{id}/objects','ObjectController@indexOrganization')->middleware('auth:api');
Я создал пользователя моделей, организацию и объект. Все они имеют свой собственный контроллер.
Я создал ObjectPolicy и попробовал это:
public function view(User $user, Object $object)
{
return $user->organization_id === $object->organization_id;
}
А потом я добавил ->middleware('can:view,object');
к маршруту.
К сожалению, это не работает, и документация Laravel не предоставляет необходимую мне информацию.
Может кто-нибудь помочь?
Спасибо!
EDIT
Понятия не имею, что я делаю не так !! Я изменил все, но я все еще получаю ответ 403.
Вот мой код:
Маршрут:
Route::get('organizations/{organization}/objects','ObjectController@index Organization')->middleware('auth:api', 'can:view, organization');
OrganizationPolicy:
public function view(User $user, Organization $organization)
{
return $user->organization_id === $organization->id;
}
ObjectController:
public function indexOrganization(Organization $organization)
{
$objects = $organization->objects;
return ObjectResource::collection($objects);
}
Я также добавил это к своему AuthServiceProvider
:
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
App\Organization::class => App\Policies\OrganizationPolicy::class,
];
РЕДАКТИРОВАТЬ 2 / РЕШЕНИЕ
Ответ от newUserName02 работает! Проблема была внутри AuthServiceProvider
. После того, как я изменил код (см. Выше в Edit) там:
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
'App\Organization' => 'App\Policies\OrganizationPolicy',
];
это сработало!