Laravel Nova 注册 Lenses

2023-02-16 17:09 更新

一旦你定义了一个 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 方法接受一个返回 true 或 false 的闭包。该闭包会接收进入的 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
        ),
    ];
}


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号