我確實為我的應用程序提供了基于策略的正確管理,并且我正在使用Nova作為應用程序的后端?,F(xiàn)在一切都在nova內(nèi)部工作,我想為我的外部應用程序設置一個額外的API。我確實必須覆蓋我的大部分資源,因為用戶只能訪問有限的范圍,例如資源:indexQueryCustomerpublic 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;}現(xiàn)在對于API,我基本上需要相同的范圍,我想知道把這個代碼放在哪里。我的第一個想法是向模型添加一個作用域,所以我會添加一個帶有參數(shù)的作用域: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;}有沒有辦法在不創(chuàng)建虛擬客戶對象的情況下應用方法中的作用域?indexQueryuse 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 回答

慕田峪7331174
TA貢獻1828條經(jīng)驗 獲得超13個贊
使用實時外觀,您可以將應用程序中的任何類視為外觀。
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);
}
- 1 回答
- 0 關注
- 81 瀏覽
添加回答
舉報
0/150
提交
取消