Menu

注册 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 网站上。
上一篇 下一篇
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~