php - Laravel 策略总是返回 false
问题描述
我创建了策略,并添加了方法视图:
public function view(User $user, Contact $contact)
{
return $user->id === $contact->manager;
}
然后我注册了它:
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
Contact::class => ContactPolicy::class,
];
然后我尝试将它与控制器助手一起使用:
public function view($id)
{
$contact = Contact::find($id);
$user = Auth::user();
$this->authorize('view', $contact);
return view('contact.edit')->with('contact', $contact);
}
和中间件:
Route::get('/contact/edit/{id}', 'EditContactController@view')->middleware('can:view,contact');
但我总是收到 403 错误。contact->manager 和 user->id 是一样的。此外,联系表方案:
CREATE TABLE `contacts` (
`id` int(11) NOT NULL,
`first_name` varchar(25) NOT NULL,
`last_name` varchar(25) NOT NULL,
`email` varchar(35) NOT NULL,
`home_phone` int(10) DEFAULT NULL,
`work_phone` int(10) DEFAULT NULL,
`cell_phone` int(10) DEFAULT NULL,
`best_phone` enum('home_phone','work_phone','cell_phone') NOT NULL,
`address_1` varchar(100) DEFAULT NULL,
`address_2` varchar(100) DEFAULT NULL,
`city` varchar(35) DEFAULT NULL,
`state` varchar(35) DEFAULT NULL,
`zip` int(6) DEFAULT NULL,
`country` varchar(35) DEFAULT NULL,
`birth_date` date DEFAULT NULL,
`manager` int(11) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
解决方案
我知道这是一个老问题,但如果其他人遇到这个问题,请确保查看控制器以确定模型是否在函数调用中声明
在原始海报的代码中,它应该是
编辑控制器.php
public function view(Contact $contact)
和 web.php
Route::get('/contact/edit/{contact}', 'EditContactController@view')->middleware('can:view,contact');
使依赖注入能够正常工作。
推荐阅读
- codeigniter - 如何在codeigintier中发送电子邮件?
- html - 显示网格 - 如何独立滚动侧边栏
- java - 这种观点不受约束。它只有设计时位置,因此除非您添加约束,否则它将在运行时跳转到 (0,0)
- javascript - 如果多个条件中的三个匹配
- firebase - 无法解析 getDownloadUrl() Firebase
- android - 如何使用 kotlin 在 android shopapp 中实现 shopify api?
- java - 如何查看由 Formatter 类创建的文件的输出
- html - 谷歌 chrome 开发者工具不显示正文中的 DOM
- keras - CTC LOSS ERROR InvalidArgumentError:目标转换序列没有足够的时间
- java - 如何在 Angular 应用程序的 GET 请求中接收参数