logo

Registering Lenses

Once you have defined a lens, you are ready to attach it to a resource. Each resource generated by Nova contains a lenses method. To attach a lens to a resource, you should simply add it to the array of lenses returned by this method:

php
/**
 * Get the lenses available for the resource.
 *
 * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
 * @return array
 */
public function lenses(NovaRequest $request)
{
    return [
        new Lenses\MostValuableUsers,
    ];
}

Alternatively, you may use the make method to instantiate your lens. Any arguments passed to the make method will be passed to the constructor of your lens:

php
/**
 * Get the lenses available for the resource.
 *
 * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
 * @return array
 */
public function lenses(NovaRequest $request)
{
    return [
        Lenses\MostValuableUsers::make(),
    ];
}

Authorization

If you would like to only expose a given lens to certain users, you may invoke the canSee method when registering your lens. The canSee method accepts a closure which should return true or false. The closure will receive the incoming HTTP request:

php
use App\Models\User;
use Laravel\Nova\Http\Requests\NovaRequest;

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

In the example above, we are using Laravel's Authorizable trait's can method on our User model to determine if the authorized user is authorized for the viewValuableUsers action. However, since proxying to authorization policy methods is a common use-case for canSee, you may use the canSeeWhen method to achieve the same behavior. The canSeeWhen method has the same method signature as the Illuminate\Foundation\Auth\Access\Authorizable trait's can method:

php
/**
 * Get the lenses available for the resource.
 *
 * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
 * @return array
 */
public function lenses(NovaRequest $request)
{
    return [
        (new Lenses\MostValuableUsers)->canSeeWhen(
            'viewValuableUsers', User::class
        ),
    ];
}