在显示回复删除按钮时如何判断授权方法来自哪里?

@can('destroy', $reply) 判断权限时,
是怎么知道授权方法 destroy 来自 ReplyPolicy 还是 TopicPolicy
是根据后面的实例参数,还是将所有相同名称的授权方法都试一次?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 1

是根据第二个参数
Laravel最终会调用以下方法:

Illuminate\Auth\Access\Gate

protected function resolveAuthCallback($user, $ability, array $arguments)  // $user是当前用户,$ability是我们传给它的第一个参数,这里就是destroy,$arguments是之后的参数
{
    //  这里的if判断有没有第二个参数并且传给@can的第二个参数有没有注册policy,如果有就调用policy里的ability,否则返回一个 return false 的闭包
    if (isset($arguments[0]) &&
        ! is_null($policy = $this->getPolicyFor($arguments[0])) &&
        $callback = $this->resolvePolicyCallback($user, $ability, $arguments, $policy)) {
        return $callback;
    }

    if (isset($this->abilities[$ability])) {
        return $this->abilities[$ability];
    }

    return function () {
        return false;
    };
}
5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!