Я разрабатываю приложение, используя Angular-7 в качестве внешнего интерфейса и Laravel-5.8. Я использую Laravel Spatie для управления пользователями. У меня есть эти три таблицы:
Таблица
CREATE TABLE `client` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`client_id` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`client_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `trips` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`dispatch_datetime` datetime DEFAULT NULL,
`loading_date` date DEFAULT NULL,
`loaded_from` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`destination` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`client_id` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `users` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`client_id` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Из приведенных выше таблиц у меня есть три класса: Пользователь, Клиент и Поездка. Я использовал Laravel Spatie, чтобы пользователи могли иметь доступ только к тем данным, на которые у них есть разрешение. Это работает отлично.
Теперь я хочу добиться от ApiController следующего:
Зарегистрированный пользователь должен иметь возможность просматривать только те поездки, которые егозапуск клиента.
Если вошедший в систему пользователь принадлежит клиенту, для которого client_id имеет значение MBB, он должен иметь возможность просматривать все поездки для всех клиентов в базе данных, кромеу него нет разрешения на просмотр поездок.
public function index(Request $request){
$user = Auth::user();
$userClientId = Auth::user()->client_id;
if(!Auth::user()->hasPermissionTo('View Trip')){
return response()->json([ "message" => 'User do not have permission'], 401);
}
try{
if(Auth::user()->client_id == 'MBB')
{
if(($request->get('sort')!='null' && $request->get('sort')!='') && $request->get('search')){
$trip = Trip::where("trip_number", "LIKE", "%{$request->get('search')}%")->orderby($request->get('sort'), $request->get('order'))->paginate(10);
} else if(($request->get('sort')!='null' && $request->get('sort')!='')){
$trip = Trip::orderby($request->get('sort'), $request->get('order'))->paginate(10);
}
else if($request->get('search'))
$trip = Trip::where("trip_number", "LIKE", "%{$request->get('search')}%")->paginate(10);
else
$trip = Trip::paginate(10);
}
else
{
$trip = Trip::where('client_id', $userClientId)
if(($request->get('sort')!='null' && $request->get('sort')!='') && $request->get('search')){
$trip = $trip->where("trip_number", "LIKE", "%{$request->get('search')}%")->orderby($request->get('sort'), $request->get('order'))->paginate(10);
} else if(($request->get('sort')!='null' && $request->get('sort')!='')){
$trip = $trip->orderby($request->get('sort'), $request->get('order'))->paginate(10);
} else if($request->get('search')) {
$trip = $trip->where("trip_number", "LIKE", "%{$request->get('search')}%")->paginate(10);
} else{
$trip = $trip->paginate(10);
}
}
return response()->json($trip, 200);
}
catch(QueryException $e)
{
$errorCode = $e->errorInfo[1];
return response()->json($errorCode);
}
}
Когда я загрузил страницу, я получил эту ошибку:
синтаксическая ошибка, неожиданная 'if '(T_IF)
Затем, когда я нажал на ошибку в консоли, я перешел на эту страницу в Laravel:
![syntax error](https://i.stack.imgur.com/pAFo6.png)
Итак, я замечаю, что ошибка происходит из оператора else (строка 56 на диаграмме, где я выделил желтый), где client_id не является MBB. Я посмотрел на утверждение и не увидел ничего плохого. Как мне устранить эту ошибку?