/// <summary> /// Remove o usuário da lista de usuários logados /// </summary> public static void ClearActivity() { if (HttpContext.Current == null || HttpContext.Current.Request.Url == null) { return; } LoginUsuario loginUsuario = GetUserInfo; if (loginUsuario == null) { FormsAuthentication.RedirectToLoginPage(); HttpContext.Current.Response.End(); return; } // Indica que o usuário saiu do sistema, se necessário LoginSistemaDAO.Instance.Sair(loginUsuario.CodUser, loginUsuario.UsuarioSync, true); // Remove o usuário da lista de usuários for (int i = 0; i < _usuario.Count; i++) { if (_usuario[i].CodUser == loginUsuario.CodUser) { _usuario.RemoveAt(i); return; } } }
/// <summary> /// Captura as informações do usuário atualmente logado no sistema. /// </summary> internal static LoginUsuario FindUserInfo(GDA.GDASession sessao, uint codUser, bool adicionarNaoEncontrado) { try { System.Security.Principal.IPrincipal principal = HttpContext.Current?.User ?? System.Threading.Thread.CurrentPrincipal; if (principal == null || String.IsNullOrEmpty(principal.Identity?.Name)) { return(null); } if (_usuario == null) { _usuario = new List <LoginUsuario>(); } bool adicionar = false; LoginUsuario retorno = null; // Chamado 12793. Invertemos as condições para que, dessa forma, seja recuperado o login // do cliente somente se for preciso, caso não seja, recupera o login do funcionário. Suspeitamos que o // erro do chamado tenha ocorrido porque foi recuperado o login do cliente e por isso o funcionário ficou trocado. // Se for login de cliente, retorna classe de login com dados do cliente if (principal.Identity.Name.Contains("|cliente")) { retorno = GetByIdCliente(codUser); if (retorno == null && adicionarNaoEncontrado) { adicionar = true; retorno = ClienteDAO.Instance.GetLogin(sessao, codUser); } } else { retorno = GetByIdFunc(codUser); if (retorno == null && adicionarNaoEncontrado) { adicionar = true; retorno = FuncionarioDAO.Instance.GetLogin(sessao, (int)codUser); } } if (adicionar && retorno != null) { _usuario.Add(retorno); } return(retorno); } catch (Exception ex) { // Chamado 12793. Inserimos este log caso ocorra erro ao recuperar o login do usuário, para tentar resolver o // problema de usuário trocado na produção, ao voltar o setor da peça, ao marcar a peça em um novo setor etc. ErroDAO.Instance.InserirFromException("Falha ao recuperar login (FindUserInfo).", ex, codUser); return(null); } }
/// <summary> /// Inclui o usuário logado na lista de usuários logados ou caso o mesmo já esteja logado, /// atualiza a data de última atividade /// </summary> public static void SetActivity() { if (HttpContext.Current == null || HttpContext.Current.Request.Url == null) { return; } LoginUsuario loginUsuario = GetUserInfo; if (loginUsuario == null) { FormsAuthentication.RedirectToLoginPage(); HttpContext.Current.Response.End(); return; } // Indica que o usuário fez o login, se necessário if (HttpContext.Current.Session != null) { HttpContext.Current.Session["idUsuario"] = loginUsuario.CodUser; } LoginSistemaDAO.Instance.Entrar(loginUsuario.CodUser, loginUsuario.UsuarioSync); // Se o usuário já estiver na lista de usuários, apenas atualiza a data de última atividade foreach (LoginUsuario login in _usuario) { if ((!loginUsuario.IsCliente && login.CodUser == loginUsuario.CodUser) || (loginUsuario.IsCliente && login.IdCliente == loginUsuario.IdCliente)) { login.UltimaAtividade = DateTime.Now; return; } } // Se o usuário corrente não etiver na lista, atualiza a data da última atividade e inclui na lista loginUsuario.UltimaAtividade = DateTime.Now; _usuario.Add(loginUsuario); }
/// <summary> /// Verifica se o usuário com o identificador informado é um administrador. /// </summary> /// <param name="idFunc"></param> /// <returns></returns> public static bool IsAdministrador(uint idFunc) { LoginUsuario l = FindUserInfo(idFunc, true); return(l.IsAdministrador); }