【发布时间】:2020-10-02 06:54:54
【问题描述】:
我正在 Laravel 中建立一个网站。我试图只允许创建它的用户查看/修改模型。我注册了策略并在路由中使用中间件来限制查看/修改/删除/更新操作,但我总是未经授权。
TrashPrivateReportPolicy:
class TrashPrivateReportPolicy
{
use HandlesAuthorization;
public function before(User $user){
if($user->can('manage_all_projects')){
return true;
}
}
public function results(User $user, TrashPrivateReport $trash_private_report){
return $user->reports()->map(function($report){$report->trash_report();})->contains($trash_private_report);
}
}
AuthServiceProvider
class AuthServiceProvider extends ServiceProvider
{
protected $policies = [
//'App\Model' => 'App\Policies\ModelPolicy',
'App\TrashPrivateReport' => 'App\Policies\TrashPrivateReportPolicy',
];
public function boot()
{
$this->registerPolicies();
Gate::before(function($user,$ability){
return $user->abilities()->pluck('name')->contains($ability);
});
}
}
路由:web.php
Route::get('/trash_private_reports/results/{trash_private_report}','TrashPrivateReportController@results')->name('trash_private_reports.results')->middleware('can:results,trash_private_report');
因此,当我以 lambda 用户身份连接并希望查看页面结果时
'/trash_private_reports/results/id/' 禁止访问。
该政策似乎没有被调用。我在策略的方法中尝试了 dd(..) 并且没有任何反应。
我已经试过了:
将政策数组更改为:
TrashPrivateReport::class=> TrashPrivateReportPolicy::class
更新和清除:
作曲家转储自动加载
php工匠路线:清除
php 工匠视图:清除
php 工匠配置:清除
感谢您的帮助:)
【问题讨论】:
-
您的控制器方法是否对模型进行类型提示以允许路由模型绑定?
标签: php laravel laravel-7 laravel-middleware