Политика Laravel: нет использования в проекте, только 403 - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь использовать политики laravel, чтобы проверить, является ли история «видимой», и если нет, если аутентифицированный пользователь владеет историей (в этом случае он все еще может просматривать ее). Я настраиваю свою политику, используя

php artisan make:policy StoryPolicy --model=Story

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

<?php

namespace App\Policies;

use App\User;
use App\Story;
use Illuminate\Auth\Access\HandlesAuthorization;

class StoryPolicy
{
    use HandlesAuthorization;

    /**
     * Determine whether the user can view the story.
     *
     * @param  \App\User  $user
     * @param  \App\Story  $story
     * @return mixed
     */
    public function view(User $user, Story $story)
    {
        if ($story->visibility == 'visible') {
            return true;
        } else {
            return $story->user_id == $user->id;
        }
    }
}

. Я регистрирую политику в моем AuthServiceProvider.

<?php

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        'App\Story' => 'App\Policies\StoryPolicy'
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();
    }
}

Насколько я понимаю, я должен иметь возможность использовать эту политику в моем контроллере. Это то, что я сделал.

<?php

namespace App\Http\Controllers;

use App\Storyblock;
use App\User;
use Illuminate\Http\Request;
use App\Category;
use App\Story;

class StoryController extends Controller
{

    public function __construct(){
        $this->middleware('auth')->except('show');
    }

    //  GET shows the story page
    public function show(Story $story) {
        $this->authorize('view',$story);

        return view('story.show', compact('story'));
    }

}

это, однако, всегда приводит к 403

Я пробовал много вещей, изменив способ установки политик, изменив логику dd'ingесли все правильно. После 4 часов поиска в Интернете мне не удалось найти ответ.

Кроме того, в своем phpStorm я заметил, что мои файлы политики обозначены красным цветом без использования в течение всего проекта. Это заставляет меня думать, что я почему-то не могу импортировать их в мой AuthServiceProvider

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Вы указали, что для метода show не будет назначено промежуточное программное обеспечение auth, поэтому не может быть аутентифицированного пользователя. Из документации политики:

"По умолчанию все шлюзы и политики автоматически возвращают false, если входящий HTTP-запрос не был инициирован аутентифицированным пользователем"

. Вам потребуетсячтобы продолжить чтение Политики, чтобы узнать, как справиться с отсутствием аутентифицированного пользователя, гость.

Laravel 5.7 Документы - Авторизация - Написание политик - Гость Пользователи

0 голосов
/ 28 октября 2019

Я не вижу весь ваш код, но вы получаете это сообщение, когда хотите получить доступ к lavarel resouce, и у вас нет токена scrf, чтобы убедиться, что у всех ваших представлений или в заголовке представления приложения у вас есть это

<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">

я думаю, что вы просто пытаетесь получить ресурс без этого, тогда он просто говорит, что у вас нет доступа к этому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...