我无法让策略在我的 Laravel 项目中工作,我安装了一个新项目来从头开始测试,我有这个控制器:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\User;
class UserController extends Controller
{
public function index()
{
$this->authorize('viewAny', auth()->user());
return response("Hello world");
}
}
本政策:
<?php
namespace App\Policies;
use Illuminate\Auth\Access\Response;
use App\Models\User;
class UserPolicy
{
public function viewAny(User $user): bool
{
return true;
}
}
这是我的模型
<?php
namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'email_verified_at' => 'datetime',
'password' => 'hashed',
];
}
我收到错误 403:此操作未经授权。我希望有人能帮助我解决我的问题。谢谢你
我也尝试过修改AuthServiceProvider文件,但没有任何改变。
必须在 App\Providers\AuthServiceProvider 中添加您的策略吗?
protected $policies = [
User::class => UserPolicy::class
];
您需要指定您正在使用的模型。具体来说,就是
User
。因此,传递当前登录的用户:
$this->authorize('viewAny', auth()->user());
此外,您正在尝试验证用户是否有权访问该页面。确保尝试访问该页面的人是用户,以便策略可以授权或不授权。
要在没有入门套件的情况下进行测试,请创建一个用户并使用它登录。
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
class UserController extends Controller
{
public function index()
{
$user = \App\Models\User::factory()->create();
Auth::login($user);
$this->authorize('viewAny', auth()->user());
return response("Hello world");
}
}
但是,如果您希望授予访客用户访问权限,您可以使用
?
符号将 User
模型设为可选:
public function viewAny(?User $user)
{
return true;
}