none
menuStrip RRS feed

  • Pregunta

  • Buen dia alguien me puede ayudar o explicarsi se puede hacer en c# se puede hacer lo que intento hacer

    tengo este codigo el cual necesito llamar al login de mi proyecto para que cuando el usuario ingrese se valide que tipo de permisos tiene cuando ya previamente se registro y de esta manera se habiliten los permisos. pero el problema es que no se como hacerlo quise hacer una clase para que fuera mas facil acceder a ella pero me da error al poner las componentes del menuStrip Y la parte de los botones que no existen el conexto actual o que no se puede acceder a ellos alguien me ayudar por favor

       public   void GlbActivaPermiso()
            {
                

                bool booPerSis=true;
                long intPermisoU;
                string stSQL = "";


               
                stSQL = "select AP.LlavePermiso,AP.ActivoPermiso from dbo.Permisos AP,dbo.UsuarioPermisos AUP ";
                stSQL = stSQL + "where AP.LlavePermiso = AUP.intPerLlave ";
                stSQL = stSQL + "and AUP.intUsrLlave = " + GlbIntUserLlave;
                GloModul.conexion.Open();
                SqlCommand oComando = new SqlCommand(stSQL, GloModul.conexion);
                //' crear DataReader
                SqlDataReader oDataReader;
                oDataReader = oComando.ExecuteReader(); // obtener DataReader
                                                        //' recorrer filas
                if (oDataReader.Read())
                { // Si tiene permisos
                    if (!oDataReader.IsDBNull(0) & oDataReader.GetInt64(1) == 0)
                    {
                        intPermisoU = Convert.ToInt64(oDataReader.GetSqlBytes(0));
                        if (intPermisoU == 1000000000000)
                        {
                            booPerSis = true;
                        }
                    }
                    while (oDataReader.Read())
                    {
                        if (!oDataReader.IsDBNull(0) & oDataReader.GetInt64(1) == 0)
                        {
                            intPermisoU = Convert.ToInt64(oDataReader.GetSqlBytes(0));
                            switch (intPermisoU)
                            {
                                case 1000000000000:
                                    booPerSis = true;
                                    //MENU INCIAR
                                    break;
                                case 1010000000000:
                                    
                                    IniciotoolStripMenuItem.Enabled = true;
                                    break;
                                case 1010100000000:
                                    iniciarSesionToolStripMenuItem.Enabled = true;
                                    break;
                                case 1010200000000:
                                    cambioDeUsuarioToolStripMenuItem.Enabled = false;
                                    break;
                                case 1010300000000:
                                    salirToolStripMenuItem.Enabled = true;

                                    //MENU SISTEMA
                                    break;
                                case 1020000000000:
                                    sistemaToolStripMenuItem.Enabled = true;
                                    break;
                                case 1020100000000:
                                    configuracionToolStripMenuItem.Enabled = true;
                                    break;
                                case 1020101000000:
                                    usuariosToolStripMenuItem.Enabled = true;
                                 
                           
                                    break;
                                case 1020101010000:
                                    CatUsuarios ct = new CatUsuarios();
                                    ct.MdiParent = this;

                                    CatUsuarios .Enabled = true;
                                    break;
                                case 1020101020000:
                                    CatUsuarios.btnEditar.Enabled = true;
                                    break;
                                case 1020101030000:
                                    CatUsuarios.btnBorrar.Enabled = true;
                                    break;

                            }
                        }
                    }
                }
                else
                {
                    Iniciarservicio();
                }
                oDataReader.Close();
                GloModul.conexion.Close();
                if (GlbIntUserLlave == 0)
                {
                    TodosPermisos();
                }
                else if (booPerSis == false)
                {
                    Iniciarservicio();
                    MessageBox.Show("No Tienes Accesso A Todos los Menus", "Aviso");
                    //GlbCargaForma("frmLOGEO");
                }
            }


    • Editado Mareli Hdz viernes, 21 de junio de 2019 16:30
    viernes, 21 de junio de 2019 16:28

Respuestas


  • buenos días,

    primero analicemos esta consulta

    stSQL = "select AP.LlavePermiso,AP.ActivoPermiso from dbo.Permisos AP,dbo.UsuarioPermisos AUP ";
             stSQL = stSQL + "where AP.LlavePermiso = AUP.intPerLlave ";
             stSQL = stSQL + "and AUP.intUsrLlave = " + GlbIntUserLlave;

    de donde vienen los parametros de busqueda del where???

    Te recomendaría crear una clase que almacene esos datos.

    public class Permiso
    {
    	public string Llavepermiso { get; set; }
    	public string ActivoPermiso { get; set; }
    }

    segundo no se por que tu variable se llama intPermisoU con un sufijo como si fuera entero y le das un getsqlBytes???

    Te aconsejo que estudios sobre el pool de conexion con los objetos de cnexion de .Net. como quiera aqui te dejo un pequeño ejemplo basado en lo que necesitas pero estudia lo tu mismo.

    Cree una clase que se llama ejemplo

    class Ejemplo
        {
            private string cadenaConexion;
    
            public Ejemplo()
            {
                cadenaConexion = "Tu cadena de conexion";
            }
    
            public Permiso ObtenerPermiso(int iperllave, int glbIntUserLlave)
            {
                Permiso permiso = new Permiso();
                string stSQL = string.Empty;
                stSQL = "select AP.LlavePermiso,AP.ActivoPermiso from dbo.Permisos AP,dbo.UsuarioPermisos AUP ";
                stSQL = stSQL + "where AP.LlavePermiso = @intPerLlave ";
                stSQL = stSQL + "and AUP.intUsrLlave = @glbIntUserLlave";
                using (SqlConnection cnn = new SqlConnection(cadenaConexion))
                {
                    using (SqlCommand cmd = cnn.CreateCommand())
                    {
                        cmd.CommandText = stSQL;
                        cmd.CommandType = System.Data.CommandType.Text;
                        cmd.Parameters.AddWithValue("@intPerLlave", iperllave);
                        cmd.Parameters.AddWithValue("@glbIntUserLlave", glbIntUserLlave);
                        cnn.Open();
                        SqlDataReader reader = cmd.ExecuteReader();
                        while (reader.Read())
                        {
                            permiso.Llavepermiso = reader["AP.LlavePermiso"].ToString();
                            permiso.ActivoPermiso = reader["AP.ActivoPermiso"].ToString();
                        }
                        cnn.Close();
                    }
                }
                return permiso;
            }
        }
    
    
        public class Permiso
        {
            public string Llavepermiso { get; set; }
            public string ActivoPermiso { get; set; }
        }

    hace lo que tu necesitas es tu consulta pero analiza los using del objeto conexion y del objeto comand

    Eso garantiza que al salir del bloque la conexion se cierre. Ejecutan el metodo Dispose(). te recomendaria manejar tus objetos de conexion siempre asi.

    Siempre trata de manejar parametros. revisa la modificacion que hice a la consulta los where las igualdades estan con un @

    despues cuando se llenan las propiedades del cmd se pasan los parametros con el metodo addwithvalue.

    Se ejecuta la consulta y ya

    tienes tu objeto con los valores los guarde en string.

    pero ahora si ya puedes crear tu validación sobre el objeto permiso. con la conexión cerrada y segura

    Deberias tener un boton iniciar sesion.

    Ese boton en el evento click llama al metodo de la clase de ejemplo que puse arriba

    y recibe un Objeto Permiso

    y alli

    haces tus validaciones



    • Propuesto como respuesta Carlos_Ruiz_M martes, 25 de junio de 2019 14:42
    • Marcado como respuesta Mareli Hdz viernes, 12 de julio de 2019 14:21
    viernes, 21 de junio de 2019 18:21