возврат политики Это действие не авторизовано независимо от того, что - PullRequest
0 голосов
/ 01 сентября 2018

Я просто пытаюсь показать компанию всем, кто хочет ее увидеть. authServiceProvider:

        Company::class => CompanyPolicy::class ,
'App\Models\Company' => 'App\Policies\CompanyPolicy',

companyPolicy

 public function view( Company $company)
{

    return true ;
}

companyController

 public function __construct(CompanyRepository $companies)
{
    $this->companies = $companies;
}


public function show(Company $company)
{
    $this->authorize('view', $company);

    return $this->companyRepository->show($company);
}

маршрут к контроллеру:

Route::apiResource('companies', 'CompanyController');

оно всегда возвращает Это действие не авторизовано. почему?

1 Ответ

0 голосов
/ 01 сентября 2018

Строка 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.

...