我已创建策略,并添加方法视图:
public function view(User $user, Contact $contact)
{
return $user->id === $contact->manager;
}
然后我注册了它:
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
Contact::class => ContactPolicy::class,
];
然后我尝试将其与controller helper一起使用:
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错误。联系人->管理员和用户->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;
4条答案
按热度按时间vmpqdwk31#
我刚换了
与
现在它和
$this->authorize('view', $contact);
,但仍返回403tyu7yeag2#
请检查你的路由链接到该方法,如果它有你的中间件,如果没有,你可以这样设置。
route::get('/view',controller@view)->中间件(“your-middleware”);
例子:
route::get('/view',usercontroller@view)->中间件('auth:user');
x6h2sr283#
我知道这是一个老问题,但是如果其他人遇到这个问题,请确保查看控制器以确定是否在函数调用中声明了模型
在原始海报的代码中,应该是
编辑控制器.php
以及web.php
这样依赖注入就可以正常工作。
slhcrj9b4#
如果在lang中翻译模型,可以检查复数形式。
让我解释一下:
示例:pagamento型号
网址slug:pagamenti
在我的例子中,在函数中使用check可以很好地工作,但使用构造函数则不行:
我改变了:
现在工作正常;)
希望能帮上忙;)