一旦你定義了一個 lens,你要準備好將它附加到一個資源中。每一個 Nova 生成的資源都包含一個 lenses
方法。要將一個 lens 附加一個資源中,你只需要簡單的將它添加到 lenses
方法返回的數(shù)組中:
/**
* 獲取屬于該資源的 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
方法來判斷授權(quán)的用戶是否已經(jīng)被授權(quán)訪問 viewValuableUsers
action。然而,對于 canSee
方法來說,通過代理方式訪問授權(quán)規(guī)則的方法是常見的使用案例,因此你可以使用 canSeeWhen
方法來實現(xiàn)相同的行為。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
),
];
}
更多建議: