Autor Tema: MenuStrip dinámico según Perfiles (roles) de Usuario con Win Forms C#  (Leído 50319 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Non Servium

  • Sv Member
  • ***
  • Mensajes: 426
  • Ilix Punx :)
Bueno les traigo acá nuevamente a mis apreciados communiters un tuto q esta de voladas en algo xD  ;)

Alcance: Es para un sistema con usuarios y roles... Pues es la propia plantilla de eso.
Explicación: Un usuario "x" tiene permisos concedidos a ciertos catálogos, permisos de lectura, escritura y eliminación... estos pueden ser restringidos, modificados, etc.  :shockd:
Requerimientos: Visual Studio 2008 (o usen el código fuente para integrarlo al 2005), SQL Server 2008 (o les paso el script q use) :) y tener ganas de aprender  :thumbsup:

Pasos light  :rofl: (para q no se aburran asumiré y obviaré unas partes)

1 - Create una base de datos SQL llamada MenuDinamico...
2 - Corre el Script

Código: [Seleccionar]
--HACEMOS UN ESQUEMA PARA Q SE VEA MAS BONITO JAJA
USE [MenuDinamico]
GO

CREATE SCHEMA [SIS] AUTHORIZATION [dbo]
GO

--CREAMOS TABLA MENUS
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [SIS].[TBL_Menus](
[Id_Menu] [int] IDENTITY(1,1) NOT NULL,
[Id_MenuPadre] [int] NULL,
[DescripcionMenu] [varchar](255) NOT NULL,
[PosicionMenu] [int] NOT NULL,
[HabilitadoMenu] [bit] NOT NULL,
[UrlMenu] [varchar](255) NULL,
[FormularioAsociado] [bit] NOT NULL,
 CONSTRAINT [PK_TBL_Menus] PRIMARY KEY CLUSTERED
(
[Id_Menu] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [SIS].[TBL_Menus] ADD  CONSTRAINT [DF_TBL_Menus_HabilitadoMenu]  DEFAULT (1) FOR [HabilitadoMenu]
GO

ALTER TABLE [SIS].[TBL_Menus] ADD  CONSTRAINT [DF_TBL_Menus_FormularioAsociado]  DEFAULT (0) FOR [FormularioAsociado]
GO

--CREAMOS TABLA PERFILES
USE [MenuDinamico]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [SIS].[TBL_Perfiles](
[Id_Perfil] [int] IDENTITY(1,1) NOT NULL,
[NombrePerfil] [varchar](25) NOT NULL,
[DescripcionPerfil] [varchar](255) NOT NULL,
 CONSTRAINT [PK_TBL_Perfiles] PRIMARY KEY CLUSTERED
(
[Id_Perfil] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
 CONSTRAINT [AK_TBL_Perfiles] UNIQUE NONCLUSTERED
(
[NombrePerfil] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

--CREAMOS TABLA USUARIOS
USE [MenuDinamico]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [SIS].[TBL_Usuarios](
[Id_Usuario] [int] IDENTITY(1,1) NOT NULL,
[Id_Perfil] [int] NOT NULL,
[IdentificadorUsuario] [varchar](20) NOT NULL,
[ContraseniaUsuario] [varchar](20) NOT NULL,
[NombreUsuario] [varchar](50) NOT NULL,
 CONSTRAINT [PK_TBL_Usuarios] PRIMARY KEY CLUSTERED
(
[Id_Usuario] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
 CONSTRAINT [AK_TBL_Usuarios] UNIQUE NONCLUSTERED
(
[IdentificadorUsuario] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [SIS].[TBL_Usuarios]  WITH NOCHECK ADD  CONSTRAINT [FK_TBL_Usuarios_TBL_Perfiles] FOREIGN KEY([Id_Perfil])
REFERENCES [SIS].[TBL_Perfiles] ([Id_Perfil])
GO

ALTER TABLE [SIS].[TBL_Usuarios] CHECK CONSTRAINT [FK_TBL_Usuarios_TBL_Perfiles]
GO

--CREAMOS TABLA PERMISOS POR PERFIL
USE [MenuDinamico]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [SIS].[TBL_PerfilesPermisos](
[Id_PerfilPermisos] [int] IDENTITY(1,1) NOT NULL,
[Id_Perfil] [int] NOT NULL,
[Id_Menu] [int] NOT NULL,
[Lectura] [bit] NOT NULL,
[Escritura] [bit] NOT NULL,
[Eliminacion] [bit] NOT NULL,
 CONSTRAINT [PK_TBL_PerfilesPermisos] PRIMARY KEY CLUSTERED
(
[Id_PerfilPermisos] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
 CONSTRAINT [AK_TBL_PerfilesPermisos] UNIQUE NONCLUSTERED
(
[Id_Perfil] ASC,
[Id_Menu] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [SIS].[TBL_PerfilesPermisos]  WITH NOCHECK ADD  CONSTRAINT [FK_TBL_PerfilesPermisos_TBL_Menus] FOREIGN KEY([Id_Menu])
REFERENCES [SIS].[TBL_Menus] ([Id_Menu])
GO

ALTER TABLE [SIS].[TBL_PerfilesPermisos] CHECK CONSTRAINT [FK_TBL_PerfilesPermisos_TBL_Menus]
GO

ALTER TABLE [SIS].[TBL_PerfilesPermisos]  WITH NOCHECK ADD  CONSTRAINT [FK_TBL_PerfilesPermisos_TBL_Perfiles] FOREIGN KEY([Id_Perfil])
REFERENCES [SIS].[TBL_Perfiles] ([Id_Perfil])
GO

ALTER TABLE [SIS].[TBL_PerfilesPermisos] CHECK CONSTRAINT [FK_TBL_PerfilesPermisos_TBL_Perfiles]
GO

ALTER TABLE [SIS].[TBL_PerfilesPermisos] ADD  CONSTRAINT [DF_TBL_PerfilesPermisos_lectura]  DEFAULT (1) FOR [Lectura]
GO

ALTER TABLE [SIS].[TBL_PerfilesPermisos] ADD  CONSTRAINT [DF_TBL_PerfilesPermisos_escritura]  DEFAULT (0) FOR [Escritura]
GO

--INSERTANDO DATOS DE PRUEBA

--Menus
INSERT INTO [SIS].[TBL_Menus]
([Id_MenuPadre]
      ,[DescripcionMenu]
      ,[PosicionMenu]
      ,[HabilitadoMenu]
      ,[UrlMenu]
      ,[FormularioAsociado]) VALUES
      (0, 'Sistema', 1, 1, NULL, 0)
     
INSERT INTO [SIS].[TBL_Menus]
([Id_MenuPadre]
      ,[DescripcionMenu]
      ,[PosicionMenu]
      ,[HabilitadoMenu]
      ,[UrlMenu]
      ,[FormularioAsociado]) VALUES
      (1, 'Perfiles', 1, 1, 'Catalogos.Frm_Perfiles', 1)
     
INSERT INTO [SIS].[TBL_Menus]
([Id_MenuPadre]
      ,[DescripcionMenu]
      ,[PosicionMenu]
      ,[HabilitadoMenu]
      ,[UrlMenu]
      ,[FormularioAsociado]) VALUES
      (1, 'Permisos', 2, 1, 'Catalogos.Frm_PerfilesPermisos', 1)
     
INSERT INTO [SIS].[TBL_Menus]
([Id_MenuPadre]
      ,[DescripcionMenu]
      ,[PosicionMenu]
      ,[HabilitadoMenu]
      ,[UrlMenu]
      ,[FormularioAsociado]) VALUES
      (1, 'Usuarios', 3, 1, 'Catalogos.Frm_Usuarios', 1)
     
INSERT INTO [SIS].[TBL_Menus]
([Id_MenuPadre]
      ,[DescripcionMenu]
      ,[PosicionMenu]
      ,[HabilitadoMenu]
      ,[UrlMenu]
      ,[FormularioAsociado]) VALUES
      (0, 'Inventarios', 2, 1, NULL, 0)
     
INSERT INTO [SIS].[TBL_Menus]
([Id_MenuPadre]
      ,[DescripcionMenu]
      ,[PosicionMenu]
      ,[HabilitadoMenu]
      ,[UrlMenu]
      ,[FormularioAsociado]) VALUES
      (5, 'Kardex', 1, 1, 'Inventarios.Frm_Kardex', 1)
     
INSERT INTO [SIS].[TBL_Menus]
([Id_MenuPadre]
      ,[DescripcionMenu]
      ,[PosicionMenu]
      ,[HabilitadoMenu]
      ,[UrlMenu]
      ,[FormularioAsociado]) VALUES
      (5, 'Facturas de Compras', 2, 1, 'Inventarios.Frm_FacturasCompras', 1)
     
INSERT INTO [SIS].[TBL_Menus]
([Id_MenuPadre]
      ,[DescripcionMenu]
      ,[PosicionMenu]
      ,[HabilitadoMenu]
      ,[UrlMenu]
      ,[FormularioAsociado]) VALUES
      (5, 'Remisiones', 3, 1, 'Inventarios.Frm_Remisiones', 1)
     
--Perfiles
INSERT INTO [MenuDinamico].[SIS].[TBL_Perfiles]
           ([NombrePerfil]
           ,[DescripcionPerfil])
     VALUES
           ('Administrador del Sistema'
           ,'Administra y da Mantenimiento a todas las opciones del Sistema')
GO

INSERT INTO [MenuDinamico].[SIS].[TBL_Perfiles]
           ([NombrePerfil]
           ,[DescripcionPerfil])
     VALUES
           ('Perfil de inventarios'
           ,'El perfil encargado de dar mantenimiento a diversos catálogos de inventarios')
GO

--Usuarios
INSERT INTO [MenuDinamico].[SIS].[TBL_Usuarios]
           ([Id_Perfil]
           ,[IdentificadorUsuario]
           ,[ContraseniaUsuario]
           ,[NombreUsuario])
     VALUES
           (1--1 Admin
           ,'imorales'
           ,'abc123'
           ,'Ilich Daniel Morales')
GO

INSERT INTO [MenuDinamico].[SIS].[TBL_Usuarios]
           ([Id_Perfil]
           ,[IdentificadorUsuario]
           ,[ContraseniaUsuario]
           ,[NombreUsuario])
     VALUES
           (1--1 Admin
           ,'mperez'
           ,'mperez'
           ,'María Pérez')
GO

INSERT INTO [MenuDinamico].[SIS].[TBL_Usuarios]
           ([Id_Perfil]
           ,[IdentificadorUsuario]
           ,[ContraseniaUsuario]
           ,[NombreUsuario])
     VALUES
           (2--2 Mantto
           ,'jgomez'
           ,'jgomez'
           ,'Juan Gómez')
GO

--Permisos por perfiles
INSERT INTO [MenuDinamico].[SIS].[TBL_PerfilesPermisos]
           ([Id_Perfil]
           ,[Id_Menu]
           ,[Lectura]
           ,[Escritura]
           ,[Eliminacion])
     SELECT 1, 1, 1, 1, 1
     UNION SELECT 1, 2, 1, 1, 1
     UNION SELECT 1, 3, 1, 1, 1
     UNION SELECT 1, 4, 1, 1, 1
     UNION SELECT 1, 5, 1, 1, 1
     UNION SELECT 1, 6, 1, 1, 0
     UNION SELECT 1, 7, 1, 0, 1
     UNION SELECT 1, 8, 1, 0, 1
     UNION SELECT 2, 5, 1, 1, 1
     UNION SELECT 2, 6, 1, 0, 0
     UNION SELECT 2, 7, 1, 1, 1
     UNION SELECT 2, 8, 1, 1, 1
GO

--Vista que ayuda un ve.... para analizar los menus disponibles
USE [MenuDinamico]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

USE [MenuDinamico]
GO

/****** Object:  View [SIS].[Qry_PerfilesPermisos]    Script Date: 05/05/2011 17:07:45 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE VIEW [SIS].[Qry_PerfilesPermisos]
AS
SELECT     SIS.TBL_Menus.DescripcionMenu, SIS.TBL_Menus.FormularioAsociado, SIS.TBL_Menus.Id_Menu, SIS.TBL_Menus.Id_MenuPadre, SIS.TBL_Menus.PosicionMenu,
                      SIS.TBL_Menus.HabilitadoMenu, SIS.TBL_Menus.UrlMenu, SIS.TBL_PerfilesPermisos.Id_Perfil, SIS.TBL_PerfilesPermisos.Lectura,
                      SIS.TBL_PerfilesPermisos.Escritura, SIS.TBL_PerfilesPermisos.Eliminacion
FROM         SIS.TBL_PerfilesPermisos INNER JOIN
                      SIS.TBL_Menus ON SIS.TBL_PerfilesPermisos.Id_Menu = SIS.TBL_Menus.Id_Menu

GO

EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
   Begin PaneConfigurations =
      Begin PaneConfiguration = 0
         NumPanes = 4
         Configuration = "(H (1[40] 4[20] 2[20] 3) )"
      End
      Begin PaneConfiguration = 1
         NumPanes = 3
         Configuration = "(H (1 [50] 4 [25] 3))"
      End
      Begin PaneConfiguration = 2
         NumPanes = 3
         Configuration = "(H (1 [50] 2 [25] 3))"
      End
      Begin PaneConfiguration = 3
         NumPanes = 3
         Configuration = "(H (4 [30] 2 [40] 3))"
      End
      Begin PaneConfiguration = 4
         NumPanes = 2
         Configuration = "(H (1 [56] 3))"
      End
      Begin PaneConfiguration = 5
         NumPanes = 2
         Configuration = "(H (2 [66] 3))"
      End
      Begin PaneConfiguration = 6
         NumPanes = 2
         Configuration = "(H (4 [50] 3))"
      End
      Begin PaneConfiguration = 7
         NumPanes = 1
         Configuration = "(V (3))"
      End
      Begin PaneConfiguration = 8
         NumPanes = 3
         Configuration = "(H (1[56] 4[18] 2) )"
      End
      Begin PaneConfiguration = 9
         NumPanes = 2
         Configuration = "(H (1 [75] 4))"
      End
      Begin PaneConfiguration = 10
         NumPanes = 2
         Configuration = "(H (1[66] 2) )"
      End
      Begin PaneConfiguration = 11
         NumPanes = 2
         Configuration = "(H (4 [60] 2))"
      End
      Begin PaneConfiguration = 12
         NumPanes = 1
         Configuration = "(H (1) )"
      End
      Begin PaneConfiguration = 13
         NumPanes = 1
         Configuration = "(V (4))"
      End
      Begin PaneConfiguration = 14
         NumPanes = 1
         Configuration = "(V (2))"
      End
      ActivePaneConfig = 0
   End
   Begin DiagramPane =
      Begin Origin =
         Top = 0
         Left = 0
      End
      Begin Tables =
         Begin Table = "TBL_PerfilesPermisos (SIS)"
            Begin Extent =
               Top = 6
               Left = 38
               Bottom = 155
               Right = 236
            End
            DisplayFlags = 280
            TopColumn = 0
         End
         Begin Table = "TBL_Menus (SIS)"
            Begin Extent =
               Top = 6
               Left = 274
               Bottom = 177
               Right = 472
            End
            DisplayFlags = 280
            TopColumn = 0
         End
      End
   End
   Begin SQLPane =
   End
   Begin DataPane =
      Begin ParameterDefaults = ""
      End
      Begin ColumnWidths = 9
         Width = 284
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
      End
   End
   Begin CriteriaPane =
      Begin ColumnWidths = 11
         Column = 1440
         Alias = 900
         Table = 1170
         Output = 720
         Append = 1400
         NewValue = 1170
         SortType = 1350
         SortOrder = 1410
         GroupBy = 1350
         Filter = 1350
         Or = 1350
         Or = 1350
         Or = 1350
      End
   End
End
' , @level0type=N'SCHEMA',@level0name=N'SIS', @level1type=N'VIEW',@level1name=N'Qry_PerfilesPermisos'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=1 , @level0type=N'SCHEMA',@level0name=N'SIS', @level1type=N'VIEW',@level1name=N'Qry_PerfilesPermisos'
GO
Te va a quedar una estructura bonita como esta...



3 - Analiza la bd y observa q Usuario tiene perfil y los permisos por perfil tiene menu y perfil  :huh:... Hasta q la comprendas pasate al 4 xD
4 - Bueno agregamos una solucion VS C# (Yo le puse "MenuDinamico")...
5 - Crea un MDI parent con un menu VACIO (osea no le hagas nada mas q ponerle nombre)  ;)



6 - Create un login asi como el mio! q se levante en el load del MDI xD

Tipo con todo esto!!!


Código: [Seleccionar]
        private DataTable dtMenus; //se guardaran los menus de la tabla SIS.TBL_Menus
        private System.Reflection.Assembly Ensamblado; //Ensamblado para levantar el catálogo
        private Ctrl_Datos.Cls_Seguridad Sistema; //Clase q hice para acceder a datos OLE-DB (SQL)
        private Int32 id_Perfil; //Variable para mantener el perfil vivo (para asignarla en el Load y usarla en un método)
        private void Frm_Mdi_Principal_Load(object sender, EventArgs e)
        {
            Frm_Login login = new Frm_Login();
            login.ShowDialog();
            if (login.IngresoCorrecto)
            {
                Ensamblado = System.Reflection.Assembly.GetExecutingAssembly();
                this.MenuPpal.Items.Clear(); //x si acaso xD
                this.CargarMenus(login.PerfilUsuario); //Ya lo hago, trankis xD
                id_Perfil = login.PerfilUsuario; //El catálogo tiene una propiedad publica
            }
            else
            {
                Application.Exit();
            }
        }



Nota: Cuando hagan login, asegurate de buscar el Id_Usuario por identificadorUsuario y ContraseniaUsuario... retorna Id_Perfil (y Id_Usuario si fuese necesario) si existe, etc, etc.. ya lo sabras hacer...

7 - El método CargarMenus es una fumada q crea el menú según tu perfil con el q el usuario inicio sesión (en teoría) y no lo pasaré x aca xq es un re.... bastante xD En resumen, importante aclarar el evento debe declararse asii...
NuevoMenu[0].Click += new EventHandler(MenuItemClicked);

y el evento q hara es... (Lo q necesitaba un colega x ahii!!)


Código: [Seleccionar]
        private void MenuItemClicked(object sender, EventArgs e)
        {
            // if the sender is a ToolStripMenuItem
            if (sender.GetType() == typeof(ToolStripMenuItem))
            {
                string NombreFormulario = ((ToolStripItem)sender).Tag.ToString();
                Object ObjFrm;
                //Type tipo = default(Type);
                Type tipo = Ensamblado.GetType(Ensamblado.GetName().Name + "." + NombreFormulario);
                if (tipo == null)
                {
                    MessageBox.Show("No se encontró el formulario", "Error de ubicación", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    if (!this.FormularioEstaAbierto(NombreFormulario))
                    {
                        ObjFrm = Activator.CreateInstance(tipo);
                        Plantilla Formulario = (Plantilla)ObjFrm;
                        Formulario.Id_Perfil = id_Perfil;
                        Formulario.MdiParent = this;
                        Formulario.Show();
                    }
                }
            }
        }

8 - Por tiempo les explicaré mas o menos lo q tienen q tener... Crear el menú según el perfil, Crear una plantilla mas o menos como esta...


y heredar tus formularios de esta plantilla :D

9 - el evento FormularioEstaAbierto debe tener... (Esto es lo q neceistas, tengo entendidoo)

Código: [Seleccionar]
        private Boolean FormularioEstaAbierto(String NombreDelFrm)
        {
            if (this.MdiChildren.Length > 0)
            {
                for (int i = 0; i < this.MdiChildren.Length; i++)
                {
                    //MessageBox.Show(NombreDelFrm.Substring(NombreDelFrm.IndexOf("Frm_"), NombreDelFrm.Length - NombreDelFrm.IndexOf("Frm_")));
                    if (this.MdiChildren[i].Name == NombreDelFrm.Substring(NombreDelFrm.IndexOf("Frm_"), NombreDelFrm.Length - NombreDelFrm.IndexOf("Frm_")))
                    {
                        MessageBox.Show("El formulario solicitado ya se encuentra abierto");
                        return true;
                    }
                }
                return false;
            }
            else
                return false;
        }

10 - Despues podes dejar plantoso (aprovechando lo d los permisos q tiene la base:thumbsup:
Solo usamos una función (q puse en mi clase de datos) q se le manden los label d los catalogos q usaron la plantilla, el Id_Perfil (heredado de Plantilla.cs) y la propiedad this.Name del formulario

Código: [Seleccionar]
public void ObtenerPermisos(int Id_Perfil, String nombreFormulario,
            ref global::System.Windows.Forms.Label Lbl_PermisoEliminacion,
            ref global::System.Windows.Forms.Label Lbl_PermisoEscritura,
            ref global::System.Windows.Forms.Label Lbl_PermisoLectura)
        {
            String sql = "SELECT Lectura, Escritura, Eliminacion FROM [SIS].[Qry_PerfilesPermisos] WHERE Id_Perfil = " + Id_Perfil + " AND UrlMenu LIKE '%" + nombreFormulario + "'";
            try
            {
                SqlDataAdapter sqlDa = new SqlDataAdapter(sql, cnn);
                DataTable permisos = new DataTable("Permisos");
                sqlDa.Fill(permisos);
                if (permisos.Rows.Count == 1)
                {
                    Lbl_PermisoEliminacion.Text += (Convert.ToInt32(permisos.Rows[0]["Eliminacion"]) == 1) ? "SI" : "NO";
                    Lbl_PermisoEscritura.Text += (Convert.ToInt32(permisos.Rows[0]["Escritura"]) == 1) ? "SI" : "NO";
                    Lbl_PermisoLectura.Text += (Convert.ToInt32(permisos.Rows[0]["Lectura"]) == 1) ? "SI" : "NO";
                }
                else
                {
                    Lbl_PermisoEliminacion.Text = "WDF? hay catalogos con el mismo nombre y diferente ubicacion?";
                    Lbl_PermisoEscritura.Text = "WDF? hay catalogos con el mismo nombre y diferente ubicacion?";
                    Lbl_PermisoLectura.Text = "WDF? hay catalogos con el mismo nombre y diferente ubicacion?";
                }
            }
            catch (Exception ex)
            {
                Lbl_PermisoEliminacion.Text = "ERROR";
                Lbl_PermisoEscritura.Text = "ERROR";
                Lbl_PermisoLectura.Text = "ERROR";
            }
        }


 :drinks:

Ya adjunto los archivos x si necesitan ver para creer jajaja  :D

Comenten si son buena gente  :bananajump: :roll:

Salud!!!


Jeinn!! ya les estaba enseñando mis bases xD
« Última Modificación: mayo 06, 2011, 03:22:50 pm por bereco190xP »
♫ Condenados a perder la libertad! Por no acatar las leyes que les asignaron. ♪ ♫
Decididos, decididos a emprender! Un camino largo y duro por no ser esclavos ♫


Watch

Desconectado Non Servium

  • Sv Member
  • ***
  • Mensajes: 426
  • Ilix Punx :)
♫ Condenados a perder la libertad! Por no acatar las leyes que les asignaron. ♪ ♫
Decididos, decididos a emprender! Un camino largo y duro por no ser esclavos ♫


Watch

Desconectado wsantos

  • MiembrosReales
  • *
  • Mensajes: 25
Re: MenuStrip dinámico según Perfiles (roles) de Usuario con Win Forms C#
« Respuesta #2 : mayo 07, 2011, 09:12:41 am »
Muy interensante.

Gracias....revisando.

Desconectado kirchoff

  • Sv Member
  • ***
  • Mensajes: 108
Re: MenuStrip dinámico según Perfiles (roles) de Usuario con Win Forms C#
« Respuesta #3 : mayo 07, 2011, 11:46:20 am »
gracias men ........revisando ... se te agradece :drinks:

Desconectado Non Servium

  • Sv Member
  • ***
  • Mensajes: 426
  • Ilix Punx :)
Re: MenuStrip dinámico según Perfiles (roles) de Usuario con Win Forms C#
« Respuesta #4 : mayo 12, 2011, 02:40:49 pm »
De nada comunidad! :D  :thumbsup:

en lo q pueda servirles! ;) 
♫ Condenados a perder la libertad! Por no acatar las leyes que les asignaron. ♪ ♫
Decididos, decididos a emprender! Un camino largo y duro por no ser esclavos ♫


Watch

Desconectado DavidR

  • The newbie
  • *
  • Mensajes: 1
Re: MenuStrip dinámico según Perfiles (roles) de Usuario con Win Forms C#
« Respuesta #5 : enero 30, 2012, 01:29:29 pm »
Muchas gracias esta muy bien tu explicación  :thumbsup:

Desconectado jmariche

  • The newbie
  • *
  • Mensajes: 2
Re: MenuStrip dinámico según Perfiles (roles) de Usuario con Win Forms C#
« Respuesta #6 : julio 09, 2012, 03:57:21 pm »
Hola amigo:

Esta excelente tu aplicación..... seria mucho pedir que por favor hicieras mas grande tu explicación, si gustas me la puedes enviar a mi correo es: jesusjonathanmb@hotmail.com.... Muchas gracias

Buen dia

Desconectado Non Servium

  • Sv Member
  • ***
  • Mensajes: 426
  • Ilix Punx :)
Re:MenuStrip dinámico según Perfiles (roles) de Usuario con Win Forms C#
« Respuesta #7 : julio 10, 2012, 09:56:36 am »
Hola amigo:

Esta excelente tu aplicación..... seria mucho pedir que por favor hicieras mas grande tu explicación, si gustas me la puedes enviar a mi correo es: jesusjonathanmb@hotmail.com.... Muchas gracias

Buen dia
Con gusto, más tarde te puedo responder a tu correo! ¿qué lenguaje de programación y gestor de base de datos ocupas?
Gracias por revivir este tema :D
♫ Condenados a perder la libertad! Por no acatar las leyes que les asignaron. ♪ ♫
Decididos, decididos a emprender! Un camino largo y duro por no ser esclavos ♫


Watch

Desconectado jmariche

  • The newbie
  • *
  • Mensajes: 2
Re:MenuStrip dinámico según Perfiles (roles) de Usuario con Win Forms C#
« Respuesta #8 : julio 10, 2012, 03:18:48 pm »
Hola amigo:

Estoy manejando Visual studio 2010 versión ultimate, y SQL server 2008.... Gracias por tu ayuda....

Buen dia

Desconectado ggonzalezr81

  • The newbie
  • *
  • Mensajes: 2
Re:MenuStrip dinámico según Perfiles (roles) de Usuario con Win Forms C#
« Respuesta #9 : agosto 04, 2012, 04:00:01 am »
Hola amigo, déjame decirte que es un gran aporte. Fuiste muy explicativo.

Precisamente estoy trabajando en un programita que necesito que contenga un menú dinámico según los roles.

Logre ver la estructura de la base de datos y está genial. Pero no he podido ver la solución que publicaste. Cuando la abro el VS 2010 hace la migración, pero al final el proyecto no me abre.

Yo estoy trabajando en  VB.net  y me pareció ver que lo tuyo esta en C.

Te agradecería demasiado si me puedes mandar la solución tuya para darme una idea a nivel de pantallas el como hacer lo mio en VB.

Mi correo: ggonzalezr81@hotmail.com

Espero te encuentres bien.

Desconectado dasagi

  • The newbie
  • *
  • Mensajes: 2
Re:MenuStrip dinámico según Perfiles (roles) de Usuario con Win Forms C#
« Respuesta #10 : febrero 25, 2014, 10:30:04 am »
Buen Dia!,

Estoy realizando un menu dinamico para windows Form en Visual 2010, me puedes por favor colocar de nuevo el codigo en visual para realizar el mio

Gracias

Desconectado Non Servium

  • Sv Member
  • ***
  • Mensajes: 426
  • Ilix Punx :)
Re:MenuStrip dinámico según Perfiles (roles) de Usuario con Win Forms C#
« Respuesta #11 : febrero 25, 2014, 11:09:23 am »
Buen Dia!,
Estoy realizando un menu dinamico para windows Form en Visual 2010, me puedes por favor colocar de nuevo el codigo en visual para realizar el mio
Gracias
Reviviendo tema muuuuy viejo... bueno, viendo que los links no están disponibles los voy a adjuntar aquí para todos nuevamente  :thumbsup:

Solución de Visual Studio 2010 y Backup de SQL Server
♫ Condenados a perder la libertad! Por no acatar las leyes que les asignaron. ♪ ♫
Decididos, decididos a emprender! Un camino largo y duro por no ser esclavos ♫


Watch

Desconectado dasagi

  • The newbie
  • *
  • Mensajes: 2
Re:MenuStrip dinámico según Perfiles (roles) de Usuario con Win Forms C#
« Respuesta #12 : febrero 25, 2014, 02:16:19 pm »
Excelente!! Gracias!! solo me falta un detalle  :thumbsup:  :drinks:

Desconectado Arielrt17

  • The newbie
  • *
  • Mensajes: 2
Re:MenuStrip dinámico según Perfiles (roles) de Usuario con Win Forms C#
« Respuesta #13 : mayo 01, 2014, 10:53:38 pm »
Buenas!, se que el Post es viejo pero quisiera hacerte una pregunta. Luego de agregar un nuevo formulario a la BD con su url y todo al ejecutar la aplicación me sale en el menú, pero al darle click me dice que el formulario no ha sido encontrado y por mas que eh revisado el código no encuentro el problema, si me pudieras ayudar te agradecería mucho.

Desconectado Non Servium

  • Sv Member
  • ***
  • Mensajes: 426
  • Ilix Punx :)
Re:MenuStrip dinámico según Perfiles (roles) de Usuario con Win Forms C#
« Respuesta #14 : mayo 02, 2014, 08:17:13 am »
1) Ponele un punto en
Código: [Seleccionar]
string NombreFormulario = ((ToolStripItem)sender).Tag.ToString();
y mirá que hace cuando llega a declarar la variable tipo unas líneas más abajo.

2) Comprobá que la ruta es correcta según Ensamblado.GetName().Name y NombreFormulario
Código: [Seleccionar]
Type tipo = Ensamblado.GetType(Ensamblado.GetName().Name + "." + NombreFormulario);
Si has puesto el formulario dentro de una carpeta, verifica que "Ensamblado.GetName().Name" traiga toda la ruta

3) Verifica que los espacios de nombre coincidan con el menú, pues se busca en base a este por el ensamblado no por el nombre
Por ejemplo:
Código: [Seleccionar]
namespace MenuDinamico.Catalogos
{
    public partial class Frm_Perfiles : MenuDinamico.Plantilla
    {
    }
}
Ya que por ocasiones sucede que cambiamos nombre a un formulario (De Form1.cs a MiFormulario.cs, por ejemplo) y no verificamos que la clase seguiría siendo Form1

4) Verifica que la ruta del formulario se asigne al menú en el MDI... es una línea que dice:
Código: [Seleccionar]
Menu[0].Tag = MenuPadre["UrlMenu"].ToString();
♫ Condenados a perder la libertad! Por no acatar las leyes que les asignaron. ♪ ♫
Decididos, decididos a emprender! Un camino largo y duro por no ser esclavos ♫


Watch