У меня проблема, я не могу использовать политики в laravel 5.2.
У меня есть 2 таблицы, ученики а также задачи.
Я пытаюсь применить политику, чтобы предотвратить редактирование задачи путем изменения URL, но я всегда получаю сообщение Это действие не авторизовано хотя задача правильного пользователя.
Код политики:
<?php
namespace App\Policies;
use App\Models\Student;
use App\Models\Task;
class TasksPolicy
{
public function edit(Student $student, Task $tasks)
{
return $student->id === $tasks->student_id;
}
}
Код в AuthServiceProvider.php
<?php
namespace App\Providers;
use App\Models\Task;
use App\Policies\TasksPolicy;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
Task::class => TasksPolicy::class
];
А затем вызов в файле TaskController.php:
public function edit($id)
{
$tasks = Task::findOrFail($id);
$this->authorize('edit', $tasks);
return view('tasks.edit', compact('tasks'));
}
Я думаю, что код хорош, потому что я несколько раз пересматривал, но, как я уже говорил ранее, я всегда получаю сообщение Это действие не авторизовано хотя задача состоит в том, чтобы редактировать пользователя.
http://i.imgur.com/2q6WFb3.jpg
Что я делаю неправильно? Как я могу правильно использовать политику?
вы используете «===», что означает, что и боковые данные, и тип данных будут совпадать. Возможно, ваши данные совпадают, а не тип данных, вы можете попробовать использовать «==»
public function edit(Student $student, Task $tasks)
{
return $student->id == $tasks->student_id;
}
Других решений пока нет …