Я пытаюсь использовать политики 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