only(['usuario', 'senha']); $usuario = Usuario::where('usuario', $credentials['usuario'])->first(); if (is_null($usuario) || !Hash::check($credentials['senha'], $usuario->senha)) { throw new InvalidCredentialsException(); } auth()->login($usuario); $token = auth()->claims([ 'customer' => $request->header('customer'), ])->refresh(); return [ 'expiration' => time() + 60 * auth()->factory()->getTTL(), 'token' => $token, ]; } public static function validateGetAuthorizationToken($request) { $request->validate([ 'usuario' => [ 'required', 'string', ], 'senha' => [ 'required', 'string', ], ]); } public static function create() { return [ 'form' => self::getFormData(), 'model' => [ 'nome' => null, 'usuario' => null, 'alterou_senha' => true, 'nova_senha' => null, 'nova_senha_confirmacao' => null, 'permissoes' => [], ], ]; } public static function store($request) { self::validate($request); $usuario = new Usuario(); $data = self::getUsuarioData($request); DB::transaction(function () use ($usuario, $data) { $usuario->fill($data); $usuario->save(); $usuario->permissoes()->sync($data['permissoes']); }); return $usuario->fresh(); } public static function edit($id) { $usuario = Usuario::findOrFail($id); return [ 'form' => self::getFormData(), 'model' => [ 'nome' => $usuario->nome, 'usuario' => $usuario->usuario, 'alterou_senha' => false, 'nova_senha' => null, 'nova_senha_confirmacao' => null, 'permissoes' => $usuario->permissoes()->pluck('id'), ], ]; } private static function getFormData() { return [ 'permissoes' => Permissao::orderBy('nome')->get(['id', 'nome']), ]; } public static function update($request, $id) { $usuario = Usuario::findOrFail($id); self::validate($request); $data = self::getUsuarioData($request); DB::transaction(function () use ($usuario, $data) { $usuario->fill($data); $usuario->save(); $usuario->permissoes()->sync($data['permissoes']); }); return $usuario->fresh(); } private static function getUsuarioData($request) { $data = [ 'nome' => $request->nome, 'usuario' => $request->usuario, 'permissoes' => $request->permissoes, ]; if (is_null($request->route('id')) || $request->alterou_senha) { $data['senha'] = $request->nova_senha; } return $data; } public static function destroy($id) { $usuario = Usuario::findOrFail($id); $usuario->delete(); } public static function datatable() { return DB::table('web_service_usuario AS usuario') ->leftJoin( 'web_service_usuario_permissao AS usuario_permissao', 'usuario_permissao.usuario_id', 'usuario.id' ) ->leftJoin( 'web_service_permissao AS permissao', 'permissao.id', 'usuario_permissao.permissao_id' ) ->select([ 'usuario.id', 'usuario.nome', DB::raw("GROUP_CONCAT(permissao.nome SEPARATOR '#') AS permissoes") ]) ->groupBy([ 'usuario.id', 'usuario.nome', ]); } private static function validate($request) { $request->validate([ 'nome' => [ 'required', 'string', 'between:6,150', ], 'usuario' => [ 'nullable', 'string', 'between:3,100', Rule::unique(Usuario::class, 'usuario')->ignore($request->route('id')), ], 'alterou_senha' => [ 'required', 'boolean', ], 'nova_senha' => [ 'nullable', 'required_if:alterou_senha,true', 'min:8', 'max:100', 'regex:/^(?=.*\d)(?=.*[a-zA-Z]).{8,}$/', ], 'permissoes' => [ 'present', 'array', ], 'permissoes.*' => [ 'required', 'integer', Rule::exists(Permissao::class, 'id'), ] ]); } }