注册 Lenses

一旦你定义了一个 lens,你要准备好将它附加到一个资源中。每一个 Nova 生成的资源都包含一个 lenses 方法。要将一个 lens 附加一个资源中,你只需要简单的将它添加到 lenses 方法返回的数组中:

/**
 * 获取属于该资源的 lenses
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function lenses(Request $request)
{
    return [new Lenses\MostValuableUsers];
}

授权

如果你只希望向某些用户暴露特定的 lens,你可以将 canSee 方法加入到你的 lens 注册链条中。 canSee 方法接受一个返回 truefalse 的闭包。该闭包会接收进入的 HTTP 请求。

use App\User;

/**
 * Get the lenses available for the resource.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function lenses(Request $request)
{
    return [
        (new Lenses\MostValuableUsers)->canSee(function ($request) {
            return $request->user()->can(
                'viewValuableUsers', User::class
            );
        }),
    ];
}

在上面的例子中,我们在 User 模型中使用了 Authorizable trait 的 can 方法来判断授权的用户是否已经被授权访问 viewValuableUsers action。然而,对于 canSee 方法来说,通过代理方式访问授权规则的方法是常见的使用案例,因此你可以使用 canSeeWhen 方法来实现相同的行为。canSeeWhen 方法拥有与 Illuminate\Foundation\Auth\Access\Authorizable trait 中 can 方法相同的方法签名:

/**
 * 获取属于该 resource 的 lenses
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function lenses(Request $request)
{
    return [
        (new Lenses\MostValuableUsers)->canSeeWhen(
            'viewValuableUsers', User::class
        ),
    ];
}

本文章首发在 LearnKu.com 网站上。
上一篇 下一篇
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~