Laravel 11:使用门和策略限制用户访问“站点”

问题描述 投票:0回答:1

我试图限制用户查看 Laravel 11 中分配给其他用户的“站点”。用户应该只能看到分配给他们的“站点”。我一直在尝试使用 Laravel 的门和策略来实现这一点,但我遇到了一些困难。

这是

SitePolicy
课程:

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');

这是

AppServiceProvider
课程:

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) {   });
    }
}

我已附上政策、路线和

AppServiceProvider
代码供参考。任何帮助将不胜感激。

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.