这是教程的第三遍,所以想弄的更加清楚。删除回复权限控制方法,源码疑问 ??
首先创建 ReplyPolicy 策略类,然后创建指定的方法
ReplyPolicy.php
public function destroy(User $user, Reply $reply)
{
// 在策略类中加入 destroy 方法
return $user->isAuthorOf($reply) || $user->isAuthorOf($reply->topic);
}
创建完成后, 在 RepliesController 类中使用策略类定义的方法
public function destroy(Reply $reply)
{
开始分析这行代码
$this->authorize('destroy', $reply);
$reply->delete();
return redirect()->to($reply->topic->link())->with('success', '删除成功');
}
$this->authorize('destroy',$reply)
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
是调用 AuthorizesRequests 这个类中的方法
}
AuthorizesRequests 类中 authorize() 方法
public function authorize($ability, $arguments = [])
{
// $this->authorize('destroy', $reply);
list($ability, $arguments) = $this->parseAbilityAndArguments($ability, $arguments);
dd($arguments);
我 dd 了 app(Gate::class) 打印出一大堆东西没有看明白
dd($ability) ==> 'destroy'
dd($arguments) ==> Reply 这个类
return app(Gate::class)->authorize($ability, $arguments);
}
现在我找到这个方法,但是我不知道这个方法怎么和 ReplyPolicy 中的 destroy() 方法做关联
希望 哪位好心人,给解答下嘛,谢谢谢谢啦。
推荐文章: