Я пытаюсь создать сайт на основе laravel framework. Я застрял в разрешении контроля с политикой. Это мой код: + Политики Регистрация в App\Providers\AuthServiceProvider
:
class AuthServiceProvider extends ServiceProvider
{
protected $policies = [
User::class => UserPolicy::class,
Category::class => CategoryPolicy::class
];
public function boot()
{
$this->registerPolicies();
try {
Permission::all()->each(function($permission) {
Gate::define($permission->name, function ($user) use($permission) {
return $user->hasPermission($permission->name);
});
});
} catch (\Exception $e) {
Log::notice('Unable to register gates. Either no database connection or no permissions table exists.');
}
}
}
- Политика пользователя в
App\Policies\UserPolicy
class UserPolicy
{
use HandlesAuthorization;
public function viewAny(User $user)
{
return true;
}
public function view(User $user, User $target_user)
{
return $user->id === $target_user->id;
}
}
- Маршрут API в
routes/api.php
Route::get('/users', 'Api\UserController@getUsers')->middleware('can:view-users');
Route::get('/users/{user_id}', 'Api\UserController@getUser')->middleware('can:view-users');
Route::put('/users/{user_id}', 'Api\UserController@updateUser')->middleware('can:edit-users');
- Контроллер пользователя в
App\Http\Controllers\Api\UserController
public function getUsers(UserRequest $request) {
$users = $this->userRepository->getAll();
$this->authorize('view', $user);
return response($users, 200);
}
public function getUser(UserRequest $request, $user_id) {
$user = $this->userRepository->find($user_id);
$this->authorize('view', $user);
return response($user, 200);
}
- Когда я пытаюсь получить данные, используя 2 URL выше, он выдал ошибку
500 Internal Server Error
, даже когда пользователь прошел аутентификацию:
{
"error": "This action is unauthorized."
}
- Я попытался зарегистрировать результат и обнаружил, что ошибка происходит из промежуточного программного обеспечения
can
или Illuminate\Auth\Middleware\Authorize
.
Строка кода:
$this->gate->authorize($ability, $this->getGateArguments($request, $models));
в handle()
Ошибка выброса функции выше.
- После нескольких часов поиска я не смог найти решение.
Кто-нибудь может указать на мою ошибку?