UserPolicy, кажется, перезаписывает ворота, которые я сделал.
Пояснение:
в AuthServiceProvider ниже, когда я закомментирую строку
User::class => UserPolicy::class
В $ защищенных политиках My Gates работает нормально.
Что может сделать ворота переписанными? (файлы ниже)
AuthServiceProvider:
<?php
namespace App\Providers;
use App\Project;
use App\Comment;
use App\ProjectImage;
use App\User;
use App\Policies\ProjectPolicy;
use App\Policies\CommentPolicy;
use App\Policies\ProjectImagePolicy;
use App\Policies\UserPolicy;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
protected $policies = [
Project::class => ProjectPolicy::class,
Comment::class => CommentPolicy::class,
ProjectImage::class => ProjectImagePolicy::class,
User::class => UserPolicy::class
];public function boot()
{
$this->registerPolicies();
Gate::define('follow', function(User $me, User $target){
return $me->id !== $target->id
&& !$me->subscriptions->contains($target->id);
});
Gate::define('unfollow', function(User $me, User $target){
return $me->subscriptions->contains($target->id);
});
}
}
UserPolicy
<?php
namespace App\Policies;
use App\User;
use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Support\Facades\Auth;
class UserPolicy
{
use HandlesAuthorization;
public function before($user)
{
return $user->isAdmin();
}public function viewUnpublished(User $me, User $target)
{
return $me->id === $target->id;
}public function update(User $me, User $target)
{
return $me->id === $target->id;
}
}
UserController, где я вызываю ворота:
public function show(User $user)
{
$refDate = new Carbon;
$refDate->subMonth();
$publishedProjects = $user->projects->where('published', true);
if(Route::is('unpublished')){
$this->authorize('viewUnpublished', $user);
}
$canFollow = Gate::allows('follow', $user) ? true : false;
$canUnfollow = Gate::allows('unfollow', $user) ? true : false;
$unpublishedProjects = $user->projects->where('published', false);
return view('user.profile', compact('user', 'publishedProjects', 'refDate', 'unpublishedProjects', 'canFollow', 'canUnfollow'));
}
Задача ещё не решена.
Других решений пока нет …