亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel Nova indexQuery 范圍重用

Laravel Nova indexQuery 范圍重用

PHP
小怪獸愛吃肉 2022-07-22 10:37:41
我的應用程序確實有一個基于策略的權限管理,并且我使用 Nova 作為應用程序的后端。現在一切都在 nova 內部工作,我想為我的外部應用程序設置一個額外的 API。我確實必須覆蓋indexQuery我的大部分資源,因為用戶只能訪問有限的范圍,例如Customer資源:public static function indexQuery(NovaRequest $request, $query){    $user = Auth::user();    // Admins and office users can see all customers    if($user->authorizeRoles(['admin', 'office'])) {        return $query;    }    // A user can only see customers associated with a job they work on    $query        ->select('customers.*')        ->join('jobs', 'jobs.customer_id', '=', 'customers.id')        ->join('teams', 'jobs.team_id', '=','teams.id')        ->join('team_user', 'teams.id', '=', 'team_user.team_id')        ->where('team_user.user_id', '=', $user->id);    return $query;}現在對于 API,我基本上需要相同的范圍,我想知道將這段代碼放在哪里。我的第一個想法是給Customer模型添加一個作用域,所以我會添加一個帶參數的作用域:/** * Limit the results to the customers the user is able to see * @param  \Illuminate\Database\Eloquent\Builder  $query * @param \App\User $user * @return \Illuminate\Database\Eloquent\Builder */public function scopeVisibleToUser($query, $user) {    if($user->authorizeRoles(['admin', 'office'])) {        return $query;    }    // A user can only see customers associated with a job they work on    $query        ->select('customers.*')        ->join('jobs', 'jobs.customer_id', '=', 'customers.id')        ->join('teams', 'jobs.team_id', '=','teams.id')        ->join('team_user', 'teams.id', '=', 'team_user.team_id')        ->where('team_user.user_id', '=', $user->id);    return $query;}有沒有辦法在indexQuery不創建虛擬客戶對象的情況下在方法內應用范圍?use App\Customer as AppCustomer;/** * Build an "index" query for the given resource. * * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request * @param  \Illuminate\Database\Eloquent\Builder  $query * @return \Illuminate\Database\Eloquent\Builder */public static function indexQuery(NovaRequest $request, $query){    $user = Auth::user();    return (new AppCustomer())->scopeVisibleToUser($query, $user);}
查看完整描述

1 回答

?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

使用實時外觀,您可以將應用程序中的任何類視為外觀。


use Facades\App\Customer as AppCustomer;


/**

 * Build an "index" query for the given resource.

 *

 * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request

 * @param  \Illuminate\Database\Eloquent\Builder  $query

 * @return \Illuminate\Database\Eloquent\Builder

 */

public static function indexQuery(NovaRequest $request, $query)

{

    $user = Auth::user();

    return AppCustomer::visibleToUser($query, $user);

}


查看完整回答
反對 回復 2022-07-22
  • 1 回答
  • 0 關注
  • 133 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號