Un login sencillo y con permisos de acuerdo al tipo de usuario, desarrollado en 3 capas (datos, entidad, y negocio) con diseño hecho en Photoshop CS6 y cuenta con su propia base de datos.
Base de datos y procedimiento almacenado
Creamos nuestra base de datos TutoVaiLogin, una tabla Usuario con los campos necesarios, el id_area permitirá brindar los permisos a los usuarios.
Creamos el procedimiento sp_logueo_ez para iniciar sesión.
Create database TutoVaiLogin go use TutoVaiLogin go create table Usuario ( id_area varchar(5), id_empleado varchar(5), nombre varchar(50), usuario varchar(10), contraseña varchar(10) ); insert into Usuario values('A0001','E0001','VaidrollTeam','Adm','Adm') insert into Usuario values('A0002','E0002','Paul Romero Sanchez','Pa01','1234') insert into Usuario values('A0003','E0003','Christian Rik Flores','Riki01','riki') create proc sp_logueo_ez @usuario varchar(10), @clave varchar(10) as select id_area,nombre,usuario,contraseña from Usuario where usuario=@usuario and contraseña=@clave go
Capa entidad
En nuestro procedimiento almacenado hay 2 parámetros usuario y clave, entonces creamos dos datos para enviar.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Capa_Entidad { public class E_Users { public String usuario { get; set; } public String clave { get; set; } } }
Capa datos
Realizamos la referencia a la capa entidad, system.configuration, la conexión y hacemos uso del procedimiento almacenado sp_logueo_ez.
using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Configuration; using System.Data; using Capa_Entidad; namespace Capa_Datos { public class D_Users { SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["sql"].ConnectionString); public DataTable D_user(E_Users obje) { SqlCommand cmd = new SqlCommand("sp_logueo_ez", cn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@usuario", obje.usuario); cmd.Parameters.AddWithValue("@clave", obje.clave); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); return dt; } } }
Capa Negocio
Referencia a la capa datos, entidad y llamar a la función ya creada en la anterior capa.
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using Capa_Datos; using Capa_Entidad; namespace Capa_Negocio { public class N_Users { D_Users objd = new D_Users(); public DataTable N_user(E_Users obje) { return objd.D_user(obje); } } }
Formulario principal (Login)
Referencia a la capa entidad y negocio, si logra encontrar al usuario ingresado abrirá el siguiente formulario, caso contrario le saldrá un mensaje de error.
En una variable compartida se almacenará el id_area del usuario y el nombre para que se haga uso en el siguiente formulario.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Capa_Entidad; using Capa_Negocio; namespace WindowsFormsApp1 { public partial class Login : Form { E_Users objeuser = new E_Users(); N_Users objnuser = new N_Users(); Principal frm1 = new Principal(); public static string usuario_nombre; public static string area; void p_logueo() { DataTable dt = new DataTable(); objeuser.usuario = txtusuario.Text; objeuser.clave = txtpass.Text; dt = objnuser.N_user(objeuser); if (dt.Rows.Count > 0) { MessageBox.Show("Bienvenido " + dt.Rows[0][1].ToString(), "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information); usuario_nombre = dt.Rows[0][1].ToString(); area = dt.Rows[0][0].ToString(); frm1.ShowDialog(); Login login = new Login(); login.ShowDialog(); if (login.DialogResult == DialogResult.OK) Application.Run(new Principal()); txtusuario.Clear(); txtpass.Clear(); } else { MessageBox.Show("Usuario o Contraseña Incorrecta", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information); } } public Login() { InitializeComponent(); } private void Login_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { p_logueo(); } private void btncancelar_Click(object sender, EventArgs e) { this.Close(); } } }
Formulario secundario
Hace uso el id_area enviado desde el otro formulario y por medio de condiciones se le brindará los permisos necesarios, además de mostrar el nombre del usuario ingresado.
Por ejemplo:
Si el usuario tiene el id_area = "A0001" tendrá habilitado todo los botones entonces será considerado administrador.
Si el usuario tiene el id_area = "A0002" tendrá habilitado solo un par de botones entonces el usuario solo podrá presionar determinados botones de acuerdo a su área de trabajo.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Principal : Form { public Principal() { InitializeComponent(); } private void Principal_Load(object sender, EventArgs e) { //admin if (Login.area == "A0001") { btnalmacen.Enabled = true; btnventas.Enabled = true; btncompras.Enabled = true; lblCargo.Text = "Administrador"; } //Ventas else if (Login.area == "A0002") { btnalmacen.Enabled = false; btnventas.Enabled = true; btncompras.Enabled = false; lblCargo.Text = "Ventas"; } //Compras else if (Login.area == "A0003") { btnalmacen.Enabled = false; btnventas.Enabled = false; btncompras.Enabled = true; lblCargo.Text = "Compras"; } lblnombre.Text = Login.usuario_nombre; timer1.Start(); } private void timer1_Tick(object sender, EventArgs e) { lblfecha.Text = DateTime.Now.ToString("dd-MM-yyyy"); lblhora.Text = DateTime.Now.ToString("hh:mm:ss tt"); } } }
App config
No te olvides de configurar el nombre del servidor.
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> </startup> <connectionStrings> <add name="sql" connectionString="server=localhost\SQLEXPRESS;integrated security=true;database=TutoVaiLogin"/> </connectionStrings> </configuration>
- Visual Studio 2019
- Photoshop CS6
- Microsoft SQL Server Management Studio 18