using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using MySQL; using System.Web.Configuration; using System.Net.Mail; /// /// Controlo de utilizadores (logins) /// namespace Intranet { public class Users { /// /// Dados para o browser usado pelo utilizador /// public class userBrowser { private string _tipo; private string _descricao; public userBrowser() { _tipo = ""; _descricao = ""; } /// Browser do utilizador public string Tipo { get { return _tipo; } set { _tipo = value; } } /// Descrição do Browser do utilizador public string Descricao { get { return _descricao; } set { _descricao = value; } } } /// /// Departamento do utilizador /// public class userDepartamento { private int _id; private string _nome; private int _responsavel; public userDepartamento() { _id = 0; _nome = ""; _responsavel = 0; } /// ID do departamento do utilizador public int ID { get { return _id; } set { _id = value; } } /// Nome do departamento do utilizador public string Nome { get { return _nome; } set { _nome = value; } } /// ID do responsável do departamento do utilizador public int Responsavel { get { return _responsavel; } set { _responsavel = value; } } } private int _id; private string _nome; private string _email; private string _login; private string _password; private string _perfil; private userDepartamento _departamento = new userDepartamento(); private int _sessao; private string _uid; private string _ip; private string _host; private string _so; private userBrowser _browser = new userBrowser(); /// /// Construtor da class USER /// /// Login /// Password /// Id do departamento public Users(string Login, string Password, int Departamento) { _id = 0; _nome = ""; _email = ""; _login = Login; _password = Password; _perfil = ""; _departamento.ID = Departamento; _departamento.Nome = ""; _departamento.Responsavel = 0; _sessao = 0; _uid = ""; _ip = ""; _host = ""; _so = ""; _browser.Tipo = ""; _browser.Descricao = ""; } // PROPRIEDADES DO UTILIZADOR /// ID do utilizador public int ID { get { return _id; } } /// Nome do utilizador public string Nome { get { return _nome; } } /// Email do utilizador public string Email { get { return _email; } } /// Login do utilizador public string Login { get { return _login; } } /// Password do utilizador public string Password { get { return _password; } } /// Perfil do utilizador public string Perfil { get { return _perfil; } } /// Departamento do utilizador (ID, Nome e ID do responsável) public userDepartamento Departamento { get { return _departamento; } set { _departamento = value; } } /// Tempo da sessão public int Sessao { get { return _sessao; } set { _sessao = value; } } /// ID da sessão public string UID { get { return _uid; } set { _uid = value; } } /// IP do utilizador public string IP { get { return _ip; } set { _ip = value; } } /// Host do utilizador public string Host { get { return _host; } set { _host = value; } } /// SO do utilizador public string SO { get { return _so; } set { _so = value; } } /// Browser do utilizador (tipo e descrição) public userBrowser Browser { get { return _browser; } set { _browser = value; } } /// /// Autenticação de utilizadores /// /// Login /// Password desencriptada. A encriptação é feita no momento da validação /// ID do departamento que se autentica public int Logon() { sql sqlLogin = new sql(WebConfigurationManager.ConnectionStrings["Site"].ConnectionString); sqlLogin.Query = "SELECT c.id, c.nome, " + " d.id, d.nome, d.responsavelid, " + " c.email, c.perfil, " + " c.ip, c.sessiontime " + "FROM sys_colaborador_departamento cd, sys_departamento d, sys_colaborador c " + "WHERE cd.colaboradorid=c.id " + " AND cd.departamentoid=d.id " + " AND c.login='" + Intranet.Criptografia.Encriptar(_login) + "' " + " AND c.password='" + Intranet.Criptografia.Encriptar(_password) + "' " + " AND d.id='" + _departamento.ID + "' " + " AND cd.activo=1 " + " AND c.activo=1 " + " AND d.activo=1"; DataTable _userLogin = sqlLogin.Read(); if (_userLogin.Rows.Count != 0) { // LOGIN OK // CONTROLO DE ACESSOS sqlLogin.Query = "INSERT INTO sys_acessos(colaboradorid, departamentoid, login, password, uid, ip, host, so, browser, browserstring, status, data) " + "VALUES (" + _userLogin.Rows[0][0].ToString() + ", " + " " + _userLogin.Rows[0][2].ToString() + ", " + " '" + Intranet.Criptografia.Encriptar(_login) + "', " + " '" + Intranet.Criptografia.Encriptar(_password) + "', " + " '" + _uid + "', " + " '" + _ip + "', " + " '" + _host + "', " + " '" + _so + "', " + " '" + _browser.Tipo + "', " + " '" + _browser.Descricao + "', " + " 'Login OK', " + " now())"; sqlLogin.Write(); // COMPLETAR OBJECTO USER _id = Convert.ToInt16(_userLogin.Rows[0][0].ToString()); _nome = _userLogin.Rows[0][1].ToString(); _email = _userLogin.Rows[0][5].ToString(); _perfil = _userLogin.Rows[0][6].ToString(); _departamento.ID = Convert.ToInt16(_userLogin.Rows[0][2].ToString()); _departamento.Nome = _userLogin.Rows[0][3].ToString(); _departamento.Responsavel = Convert.ToInt16(_userLogin.Rows[0][4].ToString()); _sessao = Convert.ToInt16(_userLogin.Rows[0][8].ToString()); // VERIFICAR SE O IP AUTENTICADO É O CORRECTO // IP do USER com o IP autenticado // e se o IP associado ao USER existe if (_userLogin.Rows[0][7].ToString().CompareTo(_ip) != 0 && _userLogin.Rows[0][7].ToString().CompareTo("0") != 0) { // ENVIAR ERRO /*Mail.sendErro("01.002", "IP autenticado incorrecto", _ip, "Login.aspx", "", "User: " + _nome + "
" + "Login: " + _login + "
" + "Password: " + _password + "
" + "Departamento: " + _departamento.Nome, _id);*/ } } else { // LOGIN INCORRECTO // CONTROLO DE ACESSOS sqlLogin.Query = "INSERT INTO sys_acessos(colaboradorid, departamentoid, login, password, uid, ip, host, so, browser, browserstring, status, data) " + "VALUES (0, " + " " + _departamento.ID + ", " + " '" + Intranet.Criptografia.Encriptar(_login) + "', " + " '" + Intranet.Criptografia.Encriptar(_password) + "', " + " '" + _uid + "', " + " '" + _ip + "', " + " '" + _host + "', " + " '" + _so + "', " + " '" + _browser.Tipo + "', " + " '" + _browser.Descricao + "', " + " 'Bad Login', " + " now())"; sqlLogin.Write(); // ENVIAR ERRO /*Mail.sendErro("01.001", "Erro de autenticação", _ip, "Login.aspx", "", "Login: " + _login + "
" + "Password: " + _password + "
", 1);*/ // LIMPAR OBJECTO USER _id = 0; _nome = ""; _email = ""; _login = ""; _password = ""; _perfil = ""; _departamento.ID = 0; _departamento.Nome = ""; _departamento.Responsavel = 0; _sessao = 0; _uid = ""; _ip = ""; _host = ""; _so = ""; _browser.Tipo = ""; _browser.Descricao = ""; } sqlLogin.closeConnection(); return _id; } /// /// Logoff do utilizador e limpenza das variáveis /// public void Logoff() { _id = 0; _nome = ""; _email = ""; _login = ""; _password = ""; _perfil = ""; _departamento.ID = 0; _departamento.Nome = ""; _departamento.Responsavel = 0; _uid = ""; _ip = ""; _host = ""; _so = ""; _browser.Tipo = ""; _browser.Descricao = ""; } /// /// Verifica o nível de permissão para menu /// (1: Administrador; /// 2: Total; /// 3: Ler / Escrever / Editar; /// 4: Ler / Escrever; /// 5: Ler;) /// /// Menu /// ID do colaborador /// ID do departamento /// Retorna o nível de permissão public int NivelPermissao(string Menu) { int nivel = Int16.MaxValue; // Coloca o nível no valor máximo, menor permissão de todas DataTable dtPermissao = new DataTable(); sql sqlPermissao = new sql(WebConfigurationManager.ConnectionStrings["Site"].ConnectionString); sqlPermissao.Query = "SELECT MIN(nivelid) " + "FROM sys_permissao " + "WHERE menu='" + Menu + "' " + " AND (colaboradorid=" + _id + " " + " OR departamentoid=" + _departamento.ID + ") " + " AND activo=1"; dtPermissao = sqlPermissao.Read(); sqlPermissao.closeConnection(); try { nivel = Convert.ToInt16(dtPermissao.Rows[0].ItemArray[0].ToString()); } catch (Exception) { } return nivel; } /// /// Identifica se um determinado colaborador é responsável de um detarminado departamento /// /// Id do colaborador /// Id do departamento /// true ou false public static bool ResponsavelDepartamento(int Colaborador, int Departamento) { bool responsaval = false; DataTable dtResponsaval = new DataTable(); sql sqlResponsaval = new sql(WebConfigurationManager.ConnectionStrings["Site"].ConnectionString); sqlResponsaval.Query = "SELECT * " + "FROM departamento " + "WHERE id=" + Departamento + " " + " AND responsavelid=" + Colaborador; dtResponsaval = sqlResponsaval.Read(); sqlResponsaval.closeConnection(); if (dtResponsaval.Rows.Count > 0) { responsaval = true; } return responsaval; } } }