在 Laravel 中,策略(Policies)是用于授权决策的一种方式。如果你的策略总是返回 false
,可能是以下几个原因:
策略类通常位于 app/Policies
目录下,它们包含了一系列方法,用于检查当前用户是否有权执行特定操作。例如,update
方法可能用于检查用户是否有权更新某个资源。
AuthServiceProvider
中手动注册。AuthServiceProvider
的 boot
方法中添加策略注册代码。AuthServiceProvider
的 boot
方法中添加策略注册代码。false
。true
或 false
。true
或 false
。假设你有一个 Post
模型和一个对应的 PostPolicy
策略类,以下是一个完整的示例:
PostPolicy.php
namespace App\Policies;
use App\Models\Post;
use Illuminate\Auth\Access\HandlesAuthorization;
class PostPolicy
{
use HandlesAuthorization;
public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}
}
AuthServiceProvider.php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use App\Policies\PostPolicy;
class AuthServiceProvider extends ServiceProvider
{
protected $policies = [
Post::class => PostPolicy::class,
];
public function boot()
{
$this->registerPolicies();
}
}
routes/web.php
use App\Http\Controllers\PostController;
Route::group(['middleware' => ['auth']], function () {
Route::put('/posts/{post}', [PostController::class, 'update'])
->name('posts.update')
->middleware('can:update-post,post');
});
通过以上步骤,你应该能够找到并解决策略总是返回 false
的问题。
领取专属 10元无门槛券
手把手带您无忧上云