public List<Modulo> ListarModuloRol(int nRolId)
        {
            try
            {
                List<Modulo> ListaModulo = new List<Modulo>();

                DbCommand oDbCommand = oDatabase.GetStoredProcCommand(Procedimiento.stp_sel_ModuloRol);
                oDatabase.AddInParameter(oDbCommand, "@nRolId", DbType.Int32, (object)nRolId ?? DBNull.Value);

                using (IDataReader oIDataReader = oDatabase.ExecuteReader(oDbCommand))
                {
                    int inMenuId = oIDataReader.GetOrdinal("nMenuId");
                    int inModId = oIDataReader.GetOrdinal("nModId");
                    int icMenuDesc = oIDataReader.GetOrdinal("cModDesc");
                    int inValor = oIDataReader.GetOrdinal("nValor");

                    while (oIDataReader.Read())
                    {
                        Modulo oModulo = new Modulo();

                        oModulo.nMenuId = DataUtil.DbValueToDefault<Int32>(oIDataReader[inMenuId]);
                        oModulo.nModId = DataUtil.DbValueToDefault<Int32>(oIDataReader[inModId]);
                        oModulo.cModDesc = DataUtil.DbValueToDefault<String>(oIDataReader[icMenuDesc]);
                        oModulo.bEstado = DataUtil.DbValueToDefault<Boolean>(oIDataReader[inValor]);

                        ListaModulo.Add(oModulo);
                    }
                }

                return ListaModulo;
            }
            catch (Exception)
            {

                throw;
            }
        }
public int RegistrarActualizarRolPermisos(Rol lstRol){
            
    ConfiguracionAD oConfAD = new ConfiguracionAD();

           List<Menu> ListMenu = new List<Menu>();
           List<Modulo> ListModulo = new List<Modulo>();
           List<Permiso> ListPermiso = new List<Permiso>();

           foreach (var menu in lstRol.ListaMenus)
           {
               Menu oMenu = new Menu();
               oMenu.nMenuId = menu.nMenuId;
               oMenu.bEstado = menu.bEstado;

               foreach (var modulo in menu.ListaModulos)
               {
                   Modulo oModulo = new Modulo();
                   oModulo.nModId = modulo.nModId;
                   oModulo.nMenuId = modulo.nMenuId;
                   oModulo.bEstado = modulo.bEstado;

                   foreach (var permiso in modulo.ListaPermisos)
                   {
                       Permiso oPermiso = new Permiso();

                       oPermiso.nPermId = permiso.nPermId;
                       oPermiso.nModId = permiso.nModId;
                       oPermiso.bEstado = permiso.bEstado;

                       ListPermiso.Add(oPermiso);
                   }
                   ListModulo.Add(oModulo);
               }
               ListMenu.Add(oMenu);
           }

           return oConfAD.RegistrarActualizarRolPermisos(lstRol.nRolId, lstRol.cRolDesc, ListMenu, ListModulo, ListPermiso);

}
       public Rol CargaRolPermisos(int nRolId)
       {
           List<Menu> ListMenu = oConfiguracionAD.ListarMenuRol(nRolId);
           List<Modulo> ListModulo = oConfiguracionAD.ListarModuloRol(nRolId);
           List<Permiso> ListPermiso = oConfiguracionAD.ListarPermisoRol(nRolId);

           var RolPermisos = from lm in ListMenu
                             select new
                             {
                                 lm.nMenuId,
                                 lm.cMenuDesc,
                                 lm.bEstado,
                                 ListaModulos = from lmo1 in ListModulo
                                               join lm2 in ListMenu
                                               on lmo1.nMenuId equals lm2.nMenuId
                                               where lmo1.nMenuId == lm.nMenuId
                                               select new
                                               {
                                                   lmo1.nModId,
                                                   lmo1.nMenuId,
                                                   lmo1.cModDesc,
                                                   lmo1.bEstado,
                                                   ListaPermisos = from lp in ListPermiso
                                                                    join lmo2 in ListModulo
                                                                    on lp.nModId equals lmo2.nModId
                                                                    where lp.nModId == lmo1.nModId
                                                                    select new
                                                                    {
                                                                        lp.nPermId,
                                                                        lp.nModId,
                                                                        lp.cPermDesc,
                                                                        lp.bEstado
                                                                    }
                                               }
                             };

           Rol oRolPermisos = new Rol();
           oRolPermisos.nRolId = nRolId;

           foreach (var menu in RolPermisos)
           {
               Menu oMenu = new Menu();
               oMenu.nMenuId = menu.nMenuId;
               oMenu.cMenuDesc = menu.cMenuDesc;
               oMenu.bEstado = menu.bEstado;

               foreach (var modulo in menu.ListaModulos)
               {
                    Modulo oModulo = new Modulo();
                    oModulo.nModId = modulo.nModId;
                    oModulo.nMenuId = modulo.nMenuId;
                    oModulo.cModDesc = modulo.cModDesc;  
                    oModulo.bEstado = modulo.bEstado;

                    foreach (var permiso in modulo.ListaPermisos)
                    {
                        Permiso oPermiso = new Permiso();

                        oPermiso.nPermId = permiso.nPermId;
                        oPermiso.nModId = permiso.nModId;
                        oPermiso.cPermDesc = permiso.cPermDesc;
                        oPermiso.bEstado = permiso.bEstado;

                        oModulo.ListaPermisos.Add(oPermiso);
                    }
                    oMenu.ListaModulos.Add(oModulo);
               }
               oRolPermisos.ListaMenus.Add(oMenu);
           }
               
           return oRolPermisos;
       }