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);
}
我有以下名为 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);
}