Индекс политики ресурсов API-интерфейса laravel 6 - PullRequest
0 голосов
/ 15 октября 2019

Политика не работает при вызове index apiResource. Всегда возвращает 403 ..

Мой ProjectPolicy это:


class ProjectPolicy
{
    use HandlesAuthorization;

    /**
     * Determine whether the user can view any projects.
     *
     * @param  \App\User  $user
     * @return mixed
     */
    public function viewAny(User $user)
    {
        return true;
    }
...

Мой ProjectController использовал это:

class ProjectController extends Controller
{
    public function __construct()
    {
        $this->authorizeResource(ProjectPolicy::class, 'project');
    }
...

Я зарегистрировал политику:


class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
        Project::class => ProjectPolicy::class,
    ];

Все работает, кроме вызова метода index:

/**
     * Display a listing of the resource.
     *
     * @param Request $request
     * @return Response
     */
    public function index(Request $request)
    {
        return $request->user()->projects()->get();
    }

1 Ответ

1 голос
/ 15 октября 2019

В конструкторе контроллера проекта вам необходимо авторизовать ресурс (модель), а не саму политику

public function __construct()
{
    $this->authorizeResource(\App\Project::class, 'project');
}

Также убедитесь, что пользователь, выполняющий запрос, аутентифицирован, не может авторизовать гостей

Но если вы хотите, чтобы гостей были авторизованы , вы можете пометить модель User как обнуляемую / необязательную на внедрении зависимости в классе политики

/**
 * Determine whether the user can view any projects.
 *
 * @param  \App\User  $user
 * @return mixed
 */
public function viewAny(?User $user)
{
    return true;
}

Надеюсь, что этопомогает

...