Laravel UserPolicy 总是 returns 403 无论如何

Laravel UserPolicy always returns 403 no matter what

我有以下名为 UserPolicy 的策略。 我只希望管理员用户 access/edit 用户数据,即使我已将 return 值设置为 true(用于测试)无论如何我仍然会收到 403 响应。


namespace App\Policies;

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

class UserPolicy
{
    use HandlesAuthorization;

    public function viewAny(User $user)
    {
        // return $user->admin();
        return true;
    }
}

我已注册保单如下


namespace App\Providers;

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

use App\Models\Auth\User;
use App\Policies\UserPolicy;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        User::class => UserPolicy::class,
    ];

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

        //
    }
}

下面的代码是我在控制器中的使用方式

 if (Gate::denies('viewAny')) {
            return response('Not Authorized!', 403);
        } 

您应该在您的控制器中使用 authorize() 方法并将 User class 作为第二个参数传递。它将请求指向目标策略。

authorize() 方法默认由基础控制器中的 Illuminate\Foundation\Auth\Access\AuthorizesRequests 特性提供。

您的控制器可能如下所示:

try {
    $this->authorize('viewAny', User::class);
} catch (AuthorizationException $e) {
    return response('Not Authorized!', 403);
}