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;
}
}
}