我试图限制用户查看 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
代码供参考。任何帮助将不胜感激。
策略中授权用户配置错误
确保您的用户已登录,或者策略允许 客人。如果您的政策不允许访客入住,请使用 策略将不会被执行并且请求将被阻止。
// Allows guests
public function view(?User $user, Site $site): bool;
// Does NOT allow guests
public function view(User $user, Site $site): bool;
错误的中间件定义
确保路线定义正确:
Route::get('/view/{site:id}', 'view' )->name('sites.view')->can('view',
'site');
如果你只使用
{id}
,Laravel 将不知道该参数是 App\Models\Site
,并且将无法调用正确的策略。