Строка Company::class => CompanyPolicy::class,
избыточна в вашем AuthServiceProvier
, и вы должны удалить ее.
позвольте мне привести пример:
предположим, что у нас есть модель с именем SomeModel
и мы зарегистрировали ее политику. у политики есть метод view
, который проверяет, может ли текущий пользователь вызвать метод show.
Для Стража api
вы можете создать trait
, как показано ниже:
trait ApiTrait
{
/**
* Authorize a given action for the current user.
*
* @param mixed $ability
* @param mixed|array $arguments
* @return \Illuminate\Auth\Access\Response
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function authorizeApi($ability, $arguments)
{
if (!request()->user('api')->can($ability, $arguments)) {
abort(403, 'This action is unauthorized.');
}
}
}
тогда в вашем контроллере используйте его:
class ExampleController extends Controller
{
use ApiTrait;
public function show(SomeModel $something)
{
$this->authorize('view', $something);
return 'it workes';
}
}
обратите внимание, вы должны защитить свой маршрут с помощью промежуточного программного обеспечения auth:api
, иначе вы получите код ошибки 500 при вызове метода can
в ApiTrait
.