[英]Laravel policies always return 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');
以便依賴注入可以正常工作。
我剛換了
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
Contact::class => ContactPolicy::class,
];
和
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
'App\Contact' => 'App\Policies\ContactPolicy',
];
現在它適用於$this->authorize('view', $contact);
,但中間件仍然返回 403
如果它有你的中間件,請檢查你的路由鏈接到該方法,如果沒有你可以設置它。
Route::get('/view', CONTROLLER@view)->middleware('YOUR-MIDDLEWARE');
例子:
Route::get('/view', UserController@view)->middleware('auth:user');
如果您用語言翻譯模型,則可以檢查復數形式。
讓我解釋:
示例:模型Pagamento
網址 slug: pagamenti
在我的情況下,使用函數內部的檢查工作正常,但使用構造函數不起作用:
public function edit(Pagamento $pagamenti)
{
$this->authorize('update', $pagamenti);
//..
我變了:
public function __construct()
{
//Abilita su tutto il resource
//$this->authorizeResource(Pagamento::class,'pagamento'); // Not Works
$this->authorizeResource(Pagamento::class,'pagamenti'); // Works
}
現在工作正常;)
希望能幫上忙;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.