Политика Laravel всегда возвращает false - PullRequest
0 голосов
/ 13 ноября 2018

Я создал политику и добавил представление метода:

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;

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Пожалуйста, проверьте вашу маршрутную ссылку на этот метод, если у вас есть промежуточное ПО, если нет, вы можете установить его как.

Route :: get ('/ view', CONTROLLER @ view) -> промежуточное ПО ('YOUR-MIDDLEWARE');

Пример:

Route :: get ('/ view', UserController @ view) -> промежуточное ПО ('auth: user');

0 голосов
/ 13 ноября 2018

Я только что заменил

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

...