Laravel 11 策略函数未调用

问题描述 投票:0回答:1
namespace App\Policies;

use App\Models\Site; use App\Models\User; use Illuminate\Auth\Access\Response;

class SitePolicy {

public function view(User $user, Site $site): bool {

dd('ihhhh');

} 
}

Route::get('/view/{id}',  'view' )->name('sites.view')->can('view', 'site');

use App\Models\Site; use App\Policies\SitePolicy; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Gate; class AppServiceProvider extends ServiceProvider {  public function register(): void  {  }  public function boot(): void  {   Gate::guessPolicyNamesUsing(function (string $site) {   });  } }

我试图限制用户查看分配给其他用户的“站点”。用户只能看到分配给它的“站点”。 我试图使用 Laravel 11 门和策略来实现它,但我遇到了麻烦。 任何帮助,将不胜感激。 我附上了策略、路线和appservice提供的代码供参考。

php laravel eloquent laravel-11
1个回答
0
投票
  1. 策略中授权用户配置错误

    确保您的用户已登录,或者策略允许 客人。如果您的政策不允许访客入住,请使用 策略将不会被执行并且请求将被阻止。

    // Allows guests
    public function view(?User $user, Site $site): bool;
    
    // Does NOT allow guests
    public function view(User $user, Site $site): bool;
    
  2. 错误的中间件定义

    确保路线定义正确:

    Route::get('/view/{site:id}', 'view' )->name('sites.view')->can('view', 
    'site');
    

    如果你只使用

    {id}
    ,Laravel 将不知道该参数是
    App\Models\Site
    ,并且将无法调用正确的策略。

© www.soinside.com 2019 - 2024. All rights reserved.