【发布时间】:2016-07-19 11:40:21
【问题描述】:
我有一个问题,我无法在 laravel 5.2 中使用策略。
我有 2 张桌子,students 和 tasks。
我尝试通过更改 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
我做错了什么?因为我可以正确使用政策?
【问题讨论】:
-
我不认为它打算在两个模型之间使用。其中之一必须是
User模型。 -
嗨,表用户为其他用户使用它,所以我必须使用学生表(我使用的是多身份验证 laravel 5.2)。
-
如果你在
edit()方法中dd($student->id, $tasks->student_id)会得到什么? -
您好,很抱歉延迟回复。如果我按照我说的那样做,例如,我会为每个表 (1, 1) 获得正确的 id。我已经使用了用户策略表,我没有遇到任何问题。显然学生表是有问题的表。