Crear un punto de venta con ASP.NET y SQL Server (Parte 2)

Permisos de la aplicación
Una vez llegada a esta parte, nuestro sistema ya nos exige un nombre de usuario y una contraseña. Lo que sigue ahora es que cuando iniciemos sesión, el sistema nos muestre las opciones a las que el usuario tiene acceso. Modificaremos el código HTML de la página mail.master y el código C# de la página main.master.cs
En la página main.master ubicamos el objeto lblOpciones el cual tiene el siguiente código:
<asp:Label ID="lblOpciones" runat="server" Text=""></asp:Label>
Lo modificaremos para que quede:
<asp:Label ID="lblOpciones" runat="server" Text="{ventas}{reportes}{administrar}"></asp:Label>
Le hemos agregado "{ventas}{reportes}{administrar}", haremos un Replace de código HTML como se muestra en seguida.
Ahora vamos al código C# del archivo main.master.cs y escribiremos el siguiente código:
void Permisos(string prmUSER_LOGIN){
    try{
        SqlConnection cnn = new SqlConnection(clsMain.CnnStr);
        cnn.Open();
        SqlCommand cmd = new SqlCommand("EXECUTE [proc_USERS_PERMISOS_MOSTRAR]'" + prmUSER_LOGIN + "'", cnn);
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read()){
            if (Convert.ToBoolean(dr["ADMINISTRAR"])){
                lblOpciones.Text = 
                    lblOpciones.Text.Replace("{administrar}","
  • administrar.aspx\">Administrar
  • "
    ); } else{ lblOpciones.Text = lblOpciones.Text.Replace("{administrar}", ""); } if (Convert.ToBoolean(dr["REPORTES"])){ lblOpciones.Text = lblOpciones.Text.Replace("{reportes}", "
  • reportes.aspx\">Reportes
  • "
    ); } else{ lblOpciones.Text = lblOpciones.Text.Replace("{reportes}", ""); } if (Convert.ToBoolean(dr["VENTAS"])){ lblOpciones.Text = lblOpciones.Text.Replace("{ventas}", "
  • ventas.aspx\">Ventas
  • "
    ); } else { lblOpciones.Text = lblOpciones.Text.Replace("{ventas}", ""); } } dr.Close(); cmd.Dispose(); cnn.Close(); cnn.Dispose(); } catch (Exception ex){ lblOpciones.Text = ex.Message; } }

    Luego creamos el siguiente procedimiento almacenado:

    USE [pventa]
    GO
    
    /****** Object:  StoredProcedure [dbo].[proc_USERS_PERMISOS_MOSTRAR]    Script Date: 09/17/2011 23:10:05 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE PROCEDURE [dbo].[proc_USERS_PERMISOS_MOSTRAR]
        @USER_LOGIN NVARCHAR(50)
    AS
    SELECT U.* FROM USERS U WHERE U.[USER_LOGIN]=@USER_LOGIN
    
    GO
    
    
    Después modificamos el Page_Load para que quede así:
    protected void Page_Load(object sender, EventArgs e)
    {
        try {
            Permisos(Context.User.Identity.Name);
        }
        catch (Exception ex) {
            lblOpciones.Text = ex.Message;
        }
    }
    
    Ahora ejecutamos de nuevo a aplicación, y al iniciar sesión veremos la siguiente pantalla:

    Podemos ver como se aplican los permisos. Crea varios usuarios en el SQL Server y ponles diferentes permisos para que veas el efecto que tiene en la pantalla.

    Anterior | Siguiente

    26 comentarios:

    1. disculpa falta el procemiento para los permisos del usuario no lo pusiste lo podrias poner por favor y por cierto esta chido tu blog..saludos

      ResponderEliminar
    2. de verdad estebloges de gran ayuda y gracias por pensar en los demas para nosotros que estudiamos sistemas ha sido de gran ayudasaludos desde ITESI Guanajuato

      ResponderEliminar
    3. Locos esta parte no me sale, eh seguido los paso pero nada, porfavor me podrian enviar hasta esta parte en mi correcto hack10.5@hotmail.com

      PORFAVOR ES URGENTE

      ResponderEliminar
    4. Buen día. Espero me puedan ayudar. Esta parte no me queda, no hace el replace de forma correcta, me muestra lo siguiente al ejecutar el código:

      ventas.aspx">Ventasreportes.aspx">Reportesadministrar.aspx">AdministrarCerrar Sesión. No me muestra el menú como tu lo tienes. Espero su pronta respuesta. Hasta luego.

      ResponderEliminar
    5. el problema es por que no están bien cerradas las etiquetas HTML.
      checa que estén los caracteres d escape (\)
      \"ventas.aspx\"

      Saludos

      ResponderEliminar
      Respuestas
      1. Me sigue apareciendo el menu de la misma manera tengo mi codigo asi
        if (Convert.ToBoolean(dr["ADMINISTRAR"]))
        {
        lblOpciones.Text = lblOpciones.Text.Replace("{administrar}"," administrar.aspx\">Administrar");
        }
        else
        {
        lblOpciones.Text.Replace("{administrar}", "");
        }
        if (Convert.ToBoolean(dr["REPORTES"]))
        {
        lblOpciones.Text = lblOpciones.Text.Replace("{reportes}"," reportes.aspx\">Reportes");
        }
        else
        {
        lblOpciones.Text.Replace("{reportes}", "");
        }
        if (Convert.ToBoolean(dr["VENTAS"]))
        {
        lblOpciones.Text = lblOpciones.Text.Replace("{ventas}"," ventas.aspx\">Ventas");
        }
        else
        {
        lblOpciones.Text.Replace("{ventas}", "");
        }

        y el menu aparece ventas.aspx">Ventas reportes.aspx">Reportes administrar.aspx">Administrar

        Eliminar
      2. Este comentario ha sido eliminado por el autor.

        Eliminar
      3. if (Convert.ToBoolean(dr["administrar"])){
        lblOpciones.Text = lblOpciones.Text.Replace("{administrar}","(li)(a href=\"administrar.aspx\")Administrar(/a)(/li)");
        }
        else{
        lblOpciones.Text = lblOpciones.Text.Replace("{administrar}", "");
        }
        if (Convert.ToBoolean(dr["reportes"])){
        lblOpciones.Text = lblOpciones.Text.Replace("{reportes}", "(li)(a href=\"reportes.aspx\")Reportes(/a)(/li)");
        }
        else{
        lblOpciones.Text = lblOpciones.Text.Replace("{reportes}", "");
        }
        if (Convert.ToBoolean(dr["ventas"])){
        lblOpciones.Text = lblOpciones.Text.Replace("{ventas}", "(li)(a href=\"ventas.aspx\")Ventas(/a)(/li)");
        }
        else {
        lblOpciones.Text = lblOpciones.Text.Replace("{ventas}", "");
        }

        Cambie los "(" y ")" de las etiquetas li y a por los caracteres "<" y ">"

        Eliminar
    6. Agradezco tu respuesta. Buen día

      ResponderEliminar
    7. Lo he intentado pero me sigue mostrando el menú de la misma forma. Puedes enviarme el código de esta parte a mi correo sino es mucha molestia?
      robo-tics@hotmail.com.

      Gracias

      ResponderEliminar
    8. Hola buenas tardes. No puedo llevar a cabo el replace. Ya revise las etiquetas HTML como me comentaste, pero aparece lo mismo. Agradeceria de mucho tu ayuda. Buen día...

      ResponderEliminar
    9. Alguien podría ayudarmeen enviarme el código de esta parte, es que no me queda el Replace. Es URGENTE. Agradezco su apoyo. Gracias

      darthsolitude@gmail.com

      ResponderEliminar
    10. estoy atorado igual, por favor alguien que me envie el codigo de esa parte del replace

      se los agradecere mucho

      jagarciardz@hotmail.com

      ResponderEliminar
    11. tengo problemas con el metodo replace ya que al momento de iniciar sesion en el menu me muestra Administrar.aspx\">Administrar" Reportes.aspx\">Reportes" Ventas.aspx\">Ventas y no los textos correspondientes, espero pueda ayudarme con esta problema

      ResponderEliminar
    12. es necesario corregir el HTML generado.
      El problema es del lado del código c#.

      ResponderEliminar
      Respuestas
      1. Me sigue apareciendo el mismo error, no podrias volver a publicar el codigo con las correcciones o enviarmelo por correo?
        Mi correo es foxdie.shield@hotmail.com

        gracias!

        Eliminar
      2. He estado investigando pero una no resulevo esa parte del codigo
        void Permisos(string prmUSER_LOGIN){
        try{
        SqlConnection cnn = new SqlConnection(clsMain.CnnStr);
        cnn.Open();
        SqlCommand cmd = new SqlCommand("EXECUTE [proc_USERS_PERMISOS_MOSTRAR]'" + prmUSER_LOGIN + "'", cnn);
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read()){
        if (Convert.ToBoolean(dr["ADMINISTRAR"])){
        lblOpciones.Text =
        lblOpciones.Text.Replace("{administrar}","
        administrar.aspx\">Administrar

        ");
        }
        else{
        lblOpciones.Text = lblOpciones.Text.Replace("{administrar}", "");
        }
        if (Convert.ToBoolean(dr["REPORTES"])){
        lblOpciones.Text =
        lblOpciones.Text.Replace("{reportes}", "
        reportes.aspx\">Reportes

        ");
        }
        else{
        lblOpciones.Text = lblOpciones.Text.Replace("{reportes}", "");
        }
        if (Convert.ToBoolean(dr["VENTAS"])){
        lblOpciones.Text =
        lblOpciones.Text.Replace("{ventas}", "
        ventas.aspx\">Ventas

        ");
        }
        else {
        lblOpciones.Text =
        lblOpciones.Text.Replace("{ventas}", "");
        }
        }
        dr.Close();
        cmd.Dispose();
        cnn.Close();
        cnn.Dispose();
        }
        catch (Exception ex){
        lblOpciones.Text = ex.Message;
        }
        }
        y aun me sigue mostrando Administrar.aspx\">Administrar" Reportes.aspx\">Reportes" Ventas.aspx\">Ventas .si puedes corregir esta parte del código te lo agradeceria mucho

        Eliminar
      3. lblOpciones.Text.Replace("{reportes}", "(li)Reportes(/li)")

        cambiar los parentesis por <>

        Eliminar
      4. Camarade teng me estoy haciendo bolas ya no se que mas hacer para solucionar este probelmas del remplace podrias pasarme el codigo de esa parte por favor mi correo es blemus_100@hotmail.com

        Eliminar
    13. (li)(a reportes.aspx\")Reportes(/a)(/li)

      ResponderEliminar
    14. me sigue apareciendo de esta manera

      "ventas.aspx">Ventas "reportes.aspx">Reportesadministrar.aspx">Administrar

      hay alguien que lo haya podido solucionar?

      ResponderEliminar
    15. algien solociono el problema del Menu:
      lblOpciones.Text = lblOpciones.Text.Replace("{administrar}","administrar.aspx\">Administrar");

      Etube revisando pero me sale el mismo error. ¿cual es la sintaxis de lblOpciones.Text.Replace?

      ResponderEliminar
    16. yo lo puse de esta manera y funciono

      SqlConnection cnn = new SqlConnection(clsMain.CnnStr);
      cnn.Open();
      SqlCommand cmd = new SqlCommand("EXECUTE [proc_USERS_PERMISOS_MOSTRAR]'" + prmUSER_LOGIN + "'", cnn);
      SqlDataReader dr = cmd.ExecuteReader();
      while (dr.Read())
      {
      if (Convert.ToBoolean(dr["ADMINISTRAR"]))
      {
      lblOpciones.Text = lblOpciones.Text.Replace("{administrar}","[li][a href = administrar.aspx\">Administrar[/a][/li]");
      }
      else
      {
      lblOpciones.Text.Replace("{administrar}", "");
      }
      if (Convert.ToBoolean(dr["REPORTES"]))
      {
      lblOpciones.Text = lblOpciones.Text.Replace("{reportes}", "[li][a href = reportes.aspx\">Reportes[/a][/li]");
      }
      else
      {
      lblOpciones.Text.Replace("{reportes}", "");
      }
      if (Convert.ToBoolean(dr["VENTAS"]))
      {
      lblOpciones.Text = lblOpciones.Text.Replace("{ventas}", "[li][a href = ventas.aspx\">Ventas[/a][/li]");
      }
      else
      {
      lblOpciones.Text.Replace("{ventas}", "");
      }

      hay que cambiar la parte donde esta [] por estos <>

      espero les sirva

      ResponderEliminar
    17. Cambien los "(" y ")" de las etiquetas li y a por los caracteres "<" y ">"

      Ejemplo:

      esto ()(/) por esto <> dentro va li
      esto () (/) por esto <> dentro va a

      aqui los puse asi, porque este textbox de comentarios no me deja incluirlos dentro saludos.

      ResponderEliminar