正确使用laravel 5.2中的策略?我不能

Cri*_*eza 5 php policies laravel

我有一个问题,我不能在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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

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
        ];
Run Code Online (Sandbox Code Playgroud)

然后在TaskController.php文件中调用:

    public function edit($id)
    {
        $tasks = Task::findOrFail($id);
        $this->authorize('edit', $tasks);
        return view('tasks.edit', compact('tasks'));
    }
Run Code Online (Sandbox Code Playgroud)

我认为代码很好,因为我已多次修改,但正如我之前所说,我总是收到消息此操作未经授权,但任务是编辑用户.

http://i.imgur.com/2q6WFb3.jpg

我究竟做错了什么?我可以正确使用该政策吗?

Imt*_*bel 0

您正在使用“===”,这意味着侧面数据和数据类型都会匹配。可能是您的数据匹配,而不是数据类型,您可以尝试使用“==”

public function edit(Student $student, Task $tasks)
    {
        return $student->id == $tasks->student_id;
    }
Run Code Online (Sandbox Code Playgroud)