Base para un sistema C# - (Parte 1)


Introducción

La mayoría de los sistemas tienen la siguiente lógica:
  1. Inicio de Sesión
  2. Pantalla Principal
    • Menú/Opción 1
    • Menú/Opción 2
    • Menú/Opción 3
  3. Salir y/o Cerrar sesión

Cada una de las opciones que ofrecen la mayoría de los sistemas está (o deberá estar) habilitada siempre y cuando el usuario que inicia sesión tenga el permiso correspondiente.

Para este ejemplo, vamos a suponer que nuestro sistema tendrá las siguientes opciones disponibles:

  • Ventas. Permiso para registrar ventas
  • Almacén. Permiso para registrar movimientos en el almacén
  • Catálogos. Permiso para hacer movimientos en los catálogos, p.e. cambiar precios de ventas, agregar unidades de medidas, etc.
  • Reportes. Consultar los reportes disponibles.
  • Administrar. Realizar tareas administrativas, p.e. administración de los usuarios del sistema, hacer respaldos de la base de datos, cancelar movimientos, etc.

Diseño

De acuerdo a lo anterior, podemos ver la necesidad de crear un motor de seguridad que nos permita validar las credenciales del usuario que ingrese a nuestro sistema.

Lo primero que haremos será crear los archivos necesarios en nuestro proyecto de Visual Studio, para este caso, he agregado dos formularios y una clase. Un formulario será para la pantalla "login" y el otro lo usaremos como "pantalla principal", la clase la utilizaré para controlar el flujo del programa. A continuación una imagen:




Luego, le daré un poco de diseño a mi pantalla principal:



También un poco de creatividad a la pantalla de login:



Respecto de la apariencia, ha sido todo, ahora será necesario crear una base de datos en Microsoft Access 2007-2010 llamada "BaseSistema" a la cual se agregaremos una tabla llamada "usuarios", a continuación una imagen de muestra:



Será necesario agregar algunos usuarios a la tabla, procuremos que tengan diferentes permisos para que cuando hagamos las pruebas podamos ver el comportamiento de nuestro programa.



Programación

Es el momento de escribir líneas de código, para este ejemplo utilizaremos algunos conceptos de programación orientada a objetos (POO). Básicamente lo que vamos a hacer es definir las características que tiene nuestro usuario, los comportamientos y luego los pasaremos a código C#. Esto con la finalidad de aprender como poner en práctica los conceptos teóricos aprendidos en la escuela.

Clase "clsUsuarios"

Esta clase contiene la definición básica del usuario. Contendrá principalmente las siguientes propiedades:



Como podemos ver, tiene las mismas propiedades que la tabla "usuarios" además que tiene un método llamado "IniciarSesión" el cual nos servirá al momento de validar la autenticidad del usuario.

Este es el código de la clase:

using System;
using System.Data;
using System.Data.OleDb;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BaseSistemaCS.Clases
{
    public class clsUsuario
    {
        
        string user_login = "";
        public string USER_LOGIN { 
            get { return user_login; } 
            set { user_login = value; } 
        }

        string user_password = "";
        public string USER_PASSWORD { 
            get { return user_password; } 
            set { user_password = value; } 
        }

        DateTime fecha_registro = DateTime.Now;
        public DateTime FECHA_REGISTRO { 
            get { return fecha_registro; }
            set { fecha_registro = value; } 
        }

        string nombre = "";
        public string NOMBRE { 
            get { return nombre; } 
            set { nombre = value; } 
        }

        string apellidos = "";
        public string APELLIDOS { 
            get { return apellidos; } 
            set { apellidos = value; } 
        }

        public string NOMBRE_USUARIO {
            get { return (String.Format("{0} {1}", 
                nombre.Trim(), apellidos.Trim())); } 
        }

        bool activo = false;
        public bool ACTIVO { 
            get { return activo; } 
            set { activo = value; } }

        bool venta = false;
        public bool VENTA { 
            get { return venta; } 
            set { venta = value; } }

        bool almacen = false;
        public bool ALMACEN { 
            get { return almacen; } 
            set { almacen = value; }
        }


        bool catalogos = false;
        public bool CATALOGOS { 
            get { return catalogos; } 
            set { catalogos = value; }
        }

        bool reportes = false;
        public bool REPORTES {
            get { return reportes; } 
            set { reportes = value; } }

        bool administrar = false;
        public bool ADMINISTRAR { 
            get { return administrar; }
            set { administrar = value; }
        }
        

        bool success = false;
        public bool SUCCESS { 
            get { return success; } 
        }

        public void IniciarSesion(string userLogin, string userPassword)
        {
            success = false;
            OleDbConnection cnnLogin = new OleDbConnection("");
            try
            {
                cnnLogin.Open();
                OleDbCommand cmdLogin = new OleDbCommand();
                cmdLogin.Connection = cnnLogin;
                cmdLogin.CommandText = "select * from usuarios " +
                    " where user_login = @user_login " +
                    " and user_password = @user_password " +
                    " and activo = True";
                //PARAMS
                cmdLogin.Parameters.Add("@user_login", 
                    OleDbType.VarChar,50).Value = userLogin;
                cmdLogin.Parameters.Add("@user_password", 
                    OleDbType.VarChar, 250).Value = userPassword;
                OleDbDataReader drLogin = cmdLogin.ExecuteReader();
                if (drLogin.Read())
                {
                    user_login = drLogin["user_login"].ToString();
                    user_password = userPassword;
                    fecha_registro = 
                        Convert.ToDateTime(drLogin["fecha_registro"]);
                    nombre = drLogin["nombre"].ToString();
                    apellidos = drLogin["apellidos"].ToString();
                    activo = Convert.ToBoolean(drLogin["activo"]);
                    venta = Convert.ToBoolean(drLogin["ventas"]);
                    almacen = Convert.ToBoolean(drLogin["almacen"]);
                    catalogos = Convert.ToBoolean(drLogin["catalogos"]);
                    reportes = Convert.ToBoolean(drLogin["reportes"]);
                    administrar = Convert.ToBoolean(drLogin["administrar"]);
                }
                else
                {
                    throw (new Exception
                        (
                        "Usuario o contraseña incorrectos")
                        );
                }
                drLogin.Close();
                success = true;
            }

            catch (Exception ex)
            {
                throw (ex);
            }
            finally
            {
                cnnLogin.Close();
            }
        }
    }
}

CONTINUACIÓN





No hay comentarios:

Publicar un comentario