Как добавить условие роли Spatie при входе в систему с помощью Laravel

Я использую Laravel-8, laravel-passport и spatie-permission для спокойного API. У меня уже есть этот код в контроллере.

У меня есть этот контроллер для администратора:

public function adminLogin(Request $request)
{
    if(Auth::attempt(['email' => $request->email, 'password' => $request->password])){
        $user = Auth::user();
        $success['token'] =  $user->createToken('MyApp')-> accessToken;
        $success['name'] =  $user->name;

        return $this->sendResponse($success, 'User login successfully.');
    }
    else{
        return $this->sendError('Unauthorised.', ['error'=>'Unauthorised']);
    }
}

Я хочу, чтобы только «Суперадминистратор» мог использовать контроллер администратора для входа в систему. Если это не «Суперадминистратор», это должно означать, что он не авторизован.

Как мне включить приведенный ниже код в то, что у меня уже есть выше, или любым другим способом?

    if($user->hasRole('Super Admin'))
        $res = User::with(['roles', 'employee', 'company'])->find($user->id);
    else
        $res = User::with('roles')->find($user->id);

person user11352561    schedule 05.04.2021    source источник


Ответы (1)


Вы можете проверить роль пользователя после попытки аутентификации.

public function adminLogin(Request $request)
{
    if (Auth::attempt($request->only('email', 'password'))) {
        $user = Auth::user();

        if (!$user->hasRole('Super Admin') {
            Auth::logout();

            return $this->sendError('Unauthorised.', ['error'=>'Unauthorised']);
        }

        $success['token'] =  $user->createToken('MyApp')-> accessToken;
        $success['name'] =  $user->name;

        return $this->sendResponse($success, 'User login successfully.');
    }

    return $this->sendError('Unauthorised.', ['error'=>'Unauthorised']);
}
person jrcamatog    schedule 05.04.2021
comment
Вы хотели бы вызвать Auth::logout(), если проверка роли Super Admin не удалась. - person Peppermintology; 05.04.2021
comment
Отредактировал ответ. - person jrcamatog; 05.04.2021