protected virtual void DespuesDePersistir(TRegistro registro, ParametrosDeNegocio parametros)
        {
            var indice = typeof(TRegistro).FullName;

            _CacheDeRecuentos[indice] = true;

            var propiedades = registro.PropiedadesDelObjeto();

            foreach (var propiedad in propiedades)
            {
                if (typeof(TRegistro).ImplementaNombre() && propiedad.Name == nameof(INombre.Nombre))
                {
                    ServicioDeCaches.EliminarElemento(typeof(TRegistro).FullName, $"{nameof(INombre.Nombre)}-{registro.ValorPropiedad(nameof(INombre.Nombre))}-1");
                    ServicioDeCaches.EliminarElemento(typeof(TRegistro).FullName, $"{nameof(INombre.Nombre)}-{registro.ValorPropiedad(nameof(INombre.Nombre))}-0");
                }

                if (propiedad.Name == nameof(registro.Id))
                {
                    ServicioDeCaches.EliminarElemento(typeof(TRegistro).FullName, $"{nameof(registro.Id)}-{registro.Id}-1");
                    ServicioDeCaches.EliminarElemento(typeof(TRegistro).FullName, $"{nameof(registro.Id)}-{registro.Id}-0");
                }
            }

            ServicioDeCaches.EliminarCache($"{typeof(TRegistro).FullName}-ak");
        }
        public static void ActualizarCachesDePermisos(ContextoSe contexto, IMapper mapeador, int idPermiso)
        {
            var gestorDePermisos = Gestor(contexto, mapeador);

            if (idPermiso == 0)
            {
                ServicioDeCaches.EliminarCache($"{nameof(GestorDeVistaMvc)}.{nameof(GestorDeVistaMvc.TienePermisos)}");
                ServicioDeCaches.EliminarCache($"{nameof(GestorDeElementos)}.{nameof(ValidarPermisosDePersistencia)}");
                ServicioDeCaches.EliminarCache($"{nameof(GestorDeElementos)}.{nameof(LeerModoDeAccesoAlNegocio)}");
                ServicioDeCaches.EliminarCache(nameof(GestorDeArbolDeMenu.LeerArbolDeMenu));
            }
            else
            {
                var permiso = gestorDePermisos.LeerRegistroPorId(idPermiso, true, false, false, aplicarJoin: true);
                if (permiso.Clase.Nombre == ClaseDePermiso.ToString(enumClaseDePermiso.Vista))
                {
                    ServicioDeCaches.EliminarCache(nameof(GestorDeArbolDeMenu.LeerArbolDeMenu));
                }
                if (permiso.Clase.Nombre == ClaseDePermiso.ToString(enumClaseDePermiso.Negocio))
                {
                    ServicioDeCaches.EliminarCache($"{nameof(GestorDeElementos)}.{nameof(LeerModoDeAccesoAlNegocio)}");
                }

                var parteDeLaClave = $"Permiso:{idPermiso}";
                ServicioDeCaches.EliminarElementos($"{nameof(GestorDeVistaMvc)}.{nameof(GestorDeVistaMvc.TienePermisos)}", parteDeLaClave);
                ServicioDeCaches.EliminarElementos($"{nameof(GestorDeElementos)}.{nameof(ValidarPermisosDePersistencia)}", parteDeLaClave);
            }
        }
Beispiel #3
0
        public static NegocioDtm LeerNegocioPorDtm(string elementoDtm)
        {
            var cache  = ServicioDeCaches.Obtener($"{nameof(NegociosDeSe)}.{nameof(LeerNegocioPorDtm)}");
            var indice = $"{nameof(Dtm)}-{elementoDtm}";

            if (!cache.ContainsKey(indice))
            {
                var consulta = new ConsultaSql <NegocioDtm>(NegocioSqls.LeerNegocioPorDtm);
                var valores  = new Dictionary <string, object> {
                    { $"@{nameof(elementoDtm)}", elementoDtm }
                };
                var negocios = consulta.LanzarConsulta(new DynamicParameters(valores));

                if (negocios.Count > 1)
                {
                    GestorDeErrores.Emitir($"No se ha localizado de forma unívoca el negocio al leer por dto {elementoDtm}");
                }

                if (negocios.Count == 0)
                {
                    return(null);
                }

                cache[indice] = negocios[0];
            }
            return((NegocioDtm)cache[indice]);
        }
        protected override void DespuesDePersistir(NegocioDtm registro, ParametrosDeNegocio parametros)
        {
            base.DespuesDePersistir(registro, parametros);

            if (parametros.Operacion == enumTipoOperacion.Modificar || parametros.Operacion == enumTipoOperacion.Eliminar)
            {
                var cache  = $"{nameof(GestorDeElementos)}.{nameof(LeerModoDeAccesoAlNegocio)}";
                var patron = $"Negocio:registro.Nombre";
                ServicioDeCaches.EliminarElementos(cache, patron);

                cache = $"{nameof(NegociosDeSe)}.{nameof(NegociosDeSe.LeerNegocioPorEnumerado)}";
                var indice = $"{nameof(enumNegocio)}-{registro.Enumerado}";
                ServicioDeCaches.EliminarElemento(cache, indice);

                cache  = $"{nameof(NegociosDeSe)}.{nameof(NegociosDeSe.LeerNegocioPorNombre)}";
                indice = $"{nameof(INombre)}-{registro.Nombre}";
                ServicioDeCaches.EliminarElemento(cache, indice);

                cache  = $"{nameof(NegociosDeSe)}.{nameof(NegociosDeSe.LeerNegocioPorDto)}";
                indice = $"{nameof(NegociosDeSe.Dto)}-{registro.ElementoDto}";
                ServicioDeCaches.EliminarElemento(cache, indice);

                cache  = $"{nameof(NegociosDeSe)}.{nameof(NegociosDeSe.LeerNegocioPorDtm)}";
                indice = $"{nameof(NegociosDeSe.Dtm)}-{registro.ElementoDtm}";
                ServicioDeCaches.EliminarElemento(cache, indice);
            }
        }
        public static GestorDeElementos <TContexto, TRegistro, TElemento> Obtener(TContexto contexto, IMapper mapeador, string clase)
        {
            /*
             * No puedo cachear el objeto gestorDeElementos ya que el contexto es disposable y si un proceso coge el objeto y otro hace un dispose de la conexión mientras se usa
             * entonces fallaría el programa. Por tanto solo cacheo el objeto ConstructorInfo
             */

            var cache = ServicioDeCaches.Obtener(nameof(Gestor));

            clase = $"GestoresDeNegocio.{clase}";
            if (!cache.ContainsKey(clase))
            {
                string ruta = Assembly.GetExecutingAssembly().GetName().CodeBase;
                ruta = ruta.Substring(8); /* Quitamos FILE://// */
                ruta = Path.GetDirectoryName(ruta);

                var ensamblado = Assembly.LoadFrom(Path.Combine(ruta, "GestoresDeNegocio.dll"));
                var type       = ensamblado.GetType(clase);

                List <Type> tipos = new List <Type> {
                    typeof(TContexto), typeof(IMapper)
                };
                var constructorSinParametros = type.GetConstructor(tipos.ToArray());
                cache[clase] = constructorSinParametros;
            }
            return((GestorDeElementos <TContexto, TRegistro, TElemento>)((ConstructorInfo)cache[clase]).Invoke(new object[] { contexto, mapeador }));

            //    cache[clase] = constructorSinParametros.Invoke(new object[] { contexto, mapeador });
            ////}
            ////else
            ////    ((GestorDeElementos<TContexto, TRegistro, TElemento>)cache[clase]).Contexto = contexto;

            //return (GestorDeElementos<TContexto, TRegistro, TElemento>)cache[clase];
        }
Beispiel #6
0
        internal static ParametroDeNegocioDtm LeerParametro(ContextoSe contextoSe, int idNegocio, string parametro, bool emitirErrorSiNoExiste)
        {
            var indice = $"{idNegocio}-{nameof(ParametroDeNegocioDtm.Nombre)}-{parametro}";
            var cache  = ServicioDeCaches.Obtener(typeof(ParametroDeNegocioDtm).FullName);

            if (cache.ContainsKey(indice))
            {
                return((ParametroDeNegocioDtm)cache[indice]);
            }

            var gestor             = Gestor(contextoSe, contextoSe.Mapeador);
            var filtroPorNegocio   = new ClausulaDeFiltrado(nameof(ParametroDeNegocioDtm.IdNegocio), CriteriosDeFiltrado.igual, idNegocio.ToString());
            var filtroPorParametro = new ClausulaDeFiltrado(nameof(ParametroDeNegocioDtm.Nombre), CriteriosDeFiltrado.igual, parametro.ToString());

            var registros = gestor.LeerRegistros(0, 2, new List <ClausulaDeFiltrado> {
                filtroPorNegocio, filtroPorParametro
            });

            if (registros.Count != 1)
            {
                GestorDeErrores.Emitir($"La informaciónal leer el parametro {parametro} del negocio con id {idNegocio} no es correcta");
            }

            cache[indice] = registros[0];

            return((ParametroDeNegocioDtm)cache[indice]);
        }
Beispiel #7
0
        public bool TienePermisos(UsuarioDtm usuarioConectado, string vista)
        {
            if (usuarioConectado.EsAdministrador)
            {
                return(true);
            }

            var vistaDtm = LeerVistaMvc(vista);
            var cache    = ServicioDeCaches.Obtener($"{nameof(GestorDeVistaMvc)}.{nameof(TienePermisos)}");
            var indice   = $"Usuario:{usuarioConectado.Id} Permiso:{vistaDtm.IdPermiso}";

            if (!cache.ContainsKey(indice))
            {
                var gestor = GestorDePermisosDeUnUsuario.Gestor(Contexto, Mapeador);

                var filtros = new List <ClausulaDeFiltrado>
                {
                    new ClausulaDeFiltrado {
                        Clausula = nameof(PermisosDeUnUsuarioDtm.IdUsuario), Criterio = CriteriosDeFiltrado.igual, Valor = usuarioConectado.Id.ToString()
                    },
                    new ClausulaDeFiltrado {
                        Clausula = nameof(PermisosDeUnUsuarioDtm.IdPermiso), Criterio = CriteriosDeFiltrado.igual, Valor = vistaDtm.IdPermiso.ToString()
                    }
                };

                cache[indice] = gestor.Contar(filtros) > 0;
            }
            return((bool)cache[indice]);
        }
Beispiel #8
0
 protected override void DespuesDePersistir(ParametroDeNegocioDtm registro, ParametrosDeNegocio parametros)
 {
     base.DespuesDePersistir(registro, parametros);
     if (parametros.Operacion == enumTipoOperacion.Modificar || parametros.Operacion == enumTipoOperacion.Eliminar)
     {
         ServicioDeCaches.EliminarElemento(typeof(ParametroDeNegocioDtm).FullName, $"{registro.IdNegocio}-{nameof(ParametroDeNegocioDtm.Nombre)}-{registro.Nombre}");
     }
 }
 protected override void DespuesDePersistir(UsuarioDtm registro, ParametrosDeNegocio parametros)
 {
     base.DespuesDePersistir(registro, parametros);
     if (parametros.Operacion != enumTipoOperacion.Insertar)
     {
         ServicioDeCaches.EliminarElemento(cache: typeof(UsuarioDtm).FullName, clave: $"{nameof(UsuarioDtm.Login)}-{registro.Login}-0");
         ServicioDeCaches.EliminarElemento(cache: typeof(UsuarioDtm).FullName, clave: $"{nameof(UsuarioDtm.Login)}-{registro.Login}-1");
     }
 }
        public enumModoDeAccesoDeDatos LeerModoDeAccesoAlNegocio(int idUsuario, enumNegocio negocio)
        {
            if (Contexto.DatosDeConexion.EsAdministrador)
            {
                return(enumModoDeAccesoDeDatos.Administrador);
            }

            if (NegociosDeSe.EsDeParametrizacion(negocio) && !Contexto.DatosDeConexion.EsAdministrador)
            {
                return(enumModoDeAccesoDeDatos.Consultor);
            }

            if (!NegociosDeSe.UsaSeguridad(negocio) || negocio == enumNegocio.No_Definido)
            {
                return(enumModoDeAccesoDeDatos.Administrador);
            }

            enumModoDeAccesoDeDatos modoDelUsuario = enumModoDeAccesoDeDatos.SinPermiso;

            var cache  = ServicioDeCaches.Obtener($"{nameof(GestorDeElementos)}.{nameof(LeerModoDeAccesoAlNegocio)}");
            var indice = $"Usuario:{idUsuario} Negocio:{negocio.ToNombre()}";

            if (!cache.ContainsKey(indice))
            {
                var modosLeidos = ModosDeAccesoAlNegocio(idUsuario, negocio);
                foreach (var modoLeido in modosLeidos)
                {
                    if (modoLeido.Administrador)
                    {
                        modoDelUsuario = enumModoDeAccesoDeDatos.Administrador;
                        break;
                    }
                    else
                    {
                        if (modoDelUsuario != enumModoDeAccesoDeDatos.Gestor && modoLeido.Gestor)
                        {
                            modoDelUsuario = enumModoDeAccesoDeDatos.Gestor;
                        }
                        else
                        if (modoLeido.Consultor && modoDelUsuario == enumModoDeAccesoDeDatos.SinPermiso)
                        {
                            modoDelUsuario = enumModoDeAccesoDeDatos.Consultor;
                        }
                    }
                }

                if (modoDelUsuario != enumModoDeAccesoDeDatos.SinPermiso && !NegocioActivo(negocio))
                {
                    return(enumModoDeAccesoDeDatos.Consultor);
                }

                cache[indice] = modoDelUsuario;
            }

            return((enumModoDeAccesoDeDatos)cache[indice]);
        }
        public static Type ObtenerTypoDto(string tipoDto)
        {
            var cache = ServicioDeCaches.Obtener(nameof(ObtenerTypoDto));

            if (!cache.ContainsKey(tipoDto))
            {
                cache[tipoDto] = Ensamblados.ObtenerType("ModeloDeDto.dll", tipoDto);
            }

            return((Type)cache[tipoDto]);
        }
Beispiel #12
0
 protected override void DespuesDePersistir(PuestosDeUnUsuarioDtm registro, ParametrosDeNegocio parametros)
 {
     base.DespuesDePersistir(registro, parametros);
     if (parametros.Operacion == enumTipoOperacion.Modificar || parametros.Operacion == enumTipoOperacion.Eliminar)
     {
         var parteDeLaClave = $"Usuario:{registro.IdUsuario}";
         ServicioDeCaches.EliminarElementos($"{nameof(GestorDeVistaMvc)}.{nameof(GestorDeVistaMvc.TienePermisos)}", parteDeLaClave);
         ServicioDeCaches.EliminarElementos($"{nameof(GestorDeElementos)}.{nameof(ValidarPermisosDePersistencia)}", parteDeLaClave);
         ServicioDeCaches.EliminarElementos($"{nameof(GestorDeElementos)}.{nameof(LeerModoDeAccesoAlNegocio)}", parteDeLaClave);
     }
 }
        public static PropertyInfo[] PropiedadesDelObjeto(Type tipo)
        {
            var indice = tipo.FullName;
            var cache  = ServicioDeCaches.Obtener(nameof(Type.GetProperties));

            if (!cache.ContainsKey(indice))
            {
                Type t = tipo.GetType();
                cache[indice] = t.GetProperties();
            }
            PropertyInfo[] props = (PropertyInfo[])cache[indice];
            return(props);
        }
Beispiel #14
0
        internal static VariableDtm LeerVariable(ContextoSe contextoSe, string variable, bool emitirErrorSiNoExiste)
        {
            var indice = $"{nameof(VariableDtm.Nombre)}-{variable}";
            var cache  = ServicioDeCaches.Obtener(typeof(VariableDtm).FullName);

            if (cache.ContainsKey(indice))
            {
                return((VariableDtm)cache[indice]);
            }

            var gestor   = Gestor(contextoSe, contextoSe.Mapeador);
            var registro = gestor.LeerRegistroCacheado(nameof(VariableDtm.Nombre), variable, emitirErrorSiNoExiste, true, false);

            return(registro);
        }
        public static TSource LeerCacheadoPorId <TSource>(this IQueryable <TSource> source, int id, bool errorSiNoHay = true) where TSource : Registro
        {
            var cache  = ServicioDeCaches.Obtener(typeof(TSource).FullName);
            var indice = $"{nameof(Registro.Id)}-{id}-0";

            if (!cache.ContainsKey(indice))
            {
                var registro = source.FirstOrDefault(x => x.Id == id);
                if (registro == null && errorSiNoHay)
                {
                    GestorDeErrores.Emitir($"No se ha localizado el objeto con id {id} buscado en la entidad {typeof(TSource).Name}");
                }
                cache[indice] = registro;
            }
            return((TSource)cache[indice]);
        }
Beispiel #16
0
        public static IGestor CrearGestor(ContextoSe contexto, string dtm, string dto)
        {
            var cache = ServicioDeCaches.Obtener(nameof(CrearGestor));
            var clave = $"{dtm}-{dto}";

            if (!cache.ContainsKey(clave))
            {
                var assembly = Assembly.LoadFile($@"{Ensamblados.RutaDeBinarios()}\GestoresDeNegocio.dll");
                var clases   = assembly.GetExportedTypes();
                for (int i = 0; i < clases.Length; i++)
                {
                    var clase = clases[i];
                    if (clase.BaseType.Name.Contains(nameof(GestorDeElementos)) && clase.BaseType.GenericTypeArguments[1].Name == dtm && clase.BaseType.GenericTypeArguments[2].Name == dto)
                    {
                        var parametros = new Type[] { typeof(ContextoSe), typeof(IMapper) };

                        cache[clave] = clase.GetConstructor(new Type[] { typeof(ContextoSe), typeof(IMapper) });
                        if (cache[clave] == null)
                        {
                            throw new Exception($"No se ha definido el constructor Gestor para la clase {clase.Name} con los parámetros de contexto y mapeador.");
                        }

                        break;
                    }

                    if (clase.BaseType.Name.Contains("GestorDeRelaciones") && clase.BaseType.GenericTypeArguments[1].Name == dtm && clase.BaseType.GenericTypeArguments[2].Name == dto)
                    {
                        var parametros = new Type[] { typeof(ContextoSe), typeof(IMapper) };

                        cache[clave] = clase.GetConstructor(new Type[] { typeof(ContextoSe), typeof(IMapper) });
                        if (cache[clave] == null)
                        {
                            throw new Exception($"No se ha definido el constructor Gestor para la clase {clase.Name} con los parámetros de contexto y mapeador.");
                        }

                        break;
                    }
                }
            }

            if (!cache.ContainsKey(clave))
            {
                throw new Exception($"No se ha localizado un gestor de elementods para los tipos {dtm}, {dto}.");
            }

            return((IGestor)((ConstructorInfo)cache[clave]).Invoke(new object[] { contexto, contexto.Mapeador }));
        }
        public TRegistro LeerRegistroCacheado(string propiedad, string valor, bool errorSiNoHay, bool errorSiHayMasDeUno, bool aplicarJoin)
        {
            var indice = $"{propiedad}-{valor}-{(!aplicarJoin ? "0" : "1")}";
            var cache  = ServicioDeCaches.Obtener(typeof(TRegistro).FullName);

            if (!cache.ContainsKey(indice))
            {
                var a = LeerRegistro(propiedad, valor, errorSiNoHay, errorSiHayMasDeUno, traqueado: false, conBloqueo: false, aplicarJoin);
                if (a == null)
                {
                    return(null);
                }

                cache[indice] = a;
            }
            return((TRegistro)cache[indice]);
        }
Beispiel #18
0
        /*
         * SELECT distinct T1.ID, T1.NOMBRE, T1.DESCRIPCION, T1.ICONO, T1.ACTIVO, T1.IDPADRE,  T1.IDVISTA_MVC, T1.ORDEN, t4.NOMBRE as permiso, t5.NOMBRE as tipo, t6.NOMBRE as clase
         * from ENTORNO.MENU t1
         * inner join ENTORNO.VISTA_MVC t2 on t2.id = t1.IDVISTA_MVC
         * inner join ENTORNO.USU_PERMISO t3 on t3.IDUSUA = 11 and t2.IDPERMISO = t3.IDPERMISO
         * inner join SEGURIDAD.PERMISO t4 on t4.ID = t3.IDPERMISO
         * inner join SEGURIDAD.TIPO_PERMISO t5 on t5.ID = t4.IDTIPO
         * inner join SEGURIDAD.CLASE_PERMISO t6 on t6.ID = t4.IDCLASE
         * where t1.IDVISTA_MVC is not null
         * and t1.ACTIVO = 1
         */


        public List <ArbolDeMenuDto> LeerArbolDeMenu(string usuario)
        {
            var gestor     = GestorDeUsuarios.Gestor(Contexto, Mapeador);
            var usuarioDtm = gestor.LeerRegistro(nameof(UsuarioDtm.Login), usuario, false, false, false, false, false);

            if (usuarioDtm == null)
            {
                GestorDeErrores.Emitir($"Usuario {usuario} no válido");
            }

            var CacheArbolDeMenu = ServicioDeCaches.Obtener(nameof(this.LeerArbolDeMenu));

            if (!CacheArbolDeMenu.ContainsKey(usuarioDtm.Id.ToString()))
            {
                var arbolDeMenu = Contexto
                                  .MenuSe
                                  .FromSqlInterpolated($@"
                                     SELECT T1.ID, 
                                            T1.NOMBRE, 
                                            T1.DESCRIPCION, 
                                            T1.ICONO, 
                                            T1.ACTIVO, 
                                            T1.IDPADRE, 
                                            T1.IDVISTA_MVC, 
                                            T1.ORDEN, 
                                            T2.NOMBRE AS PADRE, 
                                            T3.NOMBRE AS VISTA, 
                                            T3.CONTROLADOR, 
                                            T3.ACCION, 
                                            T3.PARAMETROS
                                     FROM ENTORNO.ARBOL_MENU_POR_USUARIO({usuarioDtm.Id}) AS T1
                                     LEFT JOIN ENTORNO.MENU T2 ON T2.ID = T1.IDPADRE
                                     LEFT JOIN ENTORNO.VISTA_MVC T3 ON T3.ID = T1.IDVISTA_MVC
                                     order by t1.IDPADRE, T1.ORDEN, T1.NOMBRE").ToList();

                //arbolDeMenu = LeerRegistros(0, -1);
                var resultadoDto = new List <ArbolDeMenuDto>();
                ProcesarSubMenus(resultadoDto, arbolDeMenu, padre: null);
                CacheArbolDeMenu[usuarioDtm.Id.ToString()] = resultadoDto;
            }
            return((List <ArbolDeMenuDto>)CacheArbolDeMenu[usuarioDtm.Id.ToString()]);
        }
        public virtual void BorrarRegistros(IQueryable <TRegistro> registros)
        {
            var transaccion = Contexto.IniciarTransaccion();

            try
            {
                Contexto.RemoveRange(registros);
                Contexto.SaveChanges();
                Contexto.Commit(transaccion);
            }
            catch (Exception)
            {
                Contexto.Rollback(transaccion);
                throw;
            }
            finally
            {
                ServicioDeCaches.EliminarCache(typeof(TRegistro).FullName);
                ServicioDeCaches.EliminarCache($"{typeof(TRegistro).FullName}-ak");
            }
        }
Beispiel #20
0
        public VistaMvcDtm LeerVistaMvc(string vistaMvc)
        {
            var vista = ValidarParametroAntesDeLeerVistaMvc(vistaMvc);

            var cache = ServicioDeCaches.Obtener(nameof(LeerVistaMvc));

            if (!cache.ContainsKey(vista))
            {
                var filtros = new List <ClausulaDeFiltrado>
                {
                    new ClausulaDeFiltrado {
                        Clausula = nameof(VistaMvcDtm.Controlador), Criterio = CriteriosDeFiltrado.igual, Valor = vista.Split(".")[0]
                    },
                    new ClausulaDeFiltrado {
                        Clausula = nameof(VistaMvcDtm.Accion), Criterio = CriteriosDeFiltrado.igual, Valor = vista.Split(".")[1]
                    }
                };
                var vistas = LeerRegistrosPorNombre(0, -1, filtros);
                if (vistas.Count != 1)
                {
                    if (vistas.Count == 0)
                    {
                        GestorDeErrores.Emitir($"No se ha localizado la vistaMvc {vista}");
                    }
                    else
                    {
                        GestorDeErrores.Emitir($"Se han localizado {vistas.Count} vistasMvc para {vista}");
                    }
                }

                if (vistas == null)
                {
                    GestorDeErrores.Emitir($"Defina la vista {vista} en BD");
                }

                cache[$"{vista}"] = vistas[0];
            }

            return((VistaMvcDtm)cache[$"{vista}"]);
        }
        public static string UrlParaMostrarUnDto(Type claseDto)
        {
            var cache = ServicioDeCaches.Obtener(nameof(UrlParaMostrarUnDto));

            if (!cache.ContainsKey(claseDto.FullName))
            {
                var consulta = new ConsultaSql <VistaMvcDtm>(VistaMvcSqls.LeerVistaPorDto);
                var valores  = new Dictionary <string, object> {
                    { $"@{nameof(ElementoDto)}", claseDto.FullName }
                };
                var vistas = consulta.LanzarConsulta(new DynamicParameters(valores));

                if (vistas.Count != 1)
                {
                    GestorDeErrores.Emitir($"No se ha indicado la vista para mostrar el dto {claseDto.FullName}");
                }

                cache[claseDto.FullName] = $"{vistas[0].Controlador}/{vistas[0].Accion}";
            }

            return((string)cache[claseDto.FullName]);
        }
        public TRegistro LeerRegistroCacheado(List <ClausulaDeFiltrado> filtros, bool apliacarJoin, bool errorSiNoHay = true, bool errorSiHayMasDeUno = true)
        {
            string indice = "";

            foreach (var filtro in filtros)
            {
                indice = indice.IsNullOrEmpty() ? filtro.Clausula : $"{indice}-{filtro.Clausula}";
            }
            var cache = ServicioDeCaches.Obtener($"{typeof(TRegistro).FullName}-ak");

            if (!cache.ContainsKey(indice))
            {
                var registros = LeerRegistros(0, -1, filtros, null, null, new ParametrosDeNegocio(enumTipoOperacion.LeerSinBloqueo, apliacarJoin));

                if (errorSiNoHay && registros.Count == 0)
                {
                    GestorDeErrores.Emitir($"No se ha localizado el registro solicitada para el filtro proporcionado");
                }

                if (errorSiHayMasDeUno && registros.Count > 1)
                {
                    GestorDeErrores.Emitir($"Hay más de un registro para el filtro proporcionado");
                }

                if (registros.Count == 0)
                {
                    return(null);
                }

                if (registros.Count > 1)
                {
                    return(registros[0]);
                }

                cache[indice] = registros[0];
            }
            return((TRegistro)cache[indice]);
        }
Beispiel #23
0
        public static NegocioDtm LeerNegocioPorEnumerado(enumNegocio negocio)
        {
            var cache           = ServicioDeCaches.Obtener($"{nameof(NegociosDeSe)}.{nameof(LeerNegocioPorEnumerado)}");
            var nombreEnumerado = negocio.ToString();
            var indice          = $"{nameof(enumNegocio)}-{nombreEnumerado}";

            if (!cache.ContainsKey(indice))
            {
                var consulta = new ConsultaSql <NegocioDtm>(NegocioSqls.LeerNegocioPorEnumerado);
                var valores  = new Dictionary <string, object> {
                    { $"@{nameof(NegocioDtm.Enumerado)}", nombreEnumerado }
                };
                var negocios = consulta.LanzarConsulta(new DynamicParameters(valores));

                if (negocios.Count != 1)
                {
                    GestorDeErrores.Emitir($"No se ha localizado de forma unívoca el negocio con el enumerado {nombreEnumerado}");
                }

                cache[indice] = negocios[0];
            }
            return((NegocioDtm)cache[indice]);
        }
Beispiel #24
0
        protected override void DespuesDePersistir(VistaMvcDtm registro, ParametrosDeNegocio parametros)
        {
            base.DespuesDePersistir(registro, parametros);
            var RegistroEnBD = ((VistaMvcDtm)parametros.registroEnBd);

            if (parametros.Operacion == enumTipoOperacion.Modificar && RegistroEnBD.Nombre != registro.Nombre)
            {
                GestorDePermisos.ModificarPermisoFuncional(Contexto, Mapeador, RegistroEnBD.Permiso, registro.Nombre, enumClaseDePermiso.Vista);
            }

            if (parametros.Operacion == enumTipoOperacion.Eliminar)
            {
                GestorDePermisos.Eliminar(Contexto, Mapeador, RegistroEnBD.Permiso);
            }

            if (parametros.Operacion == enumTipoOperacion.Eliminar || parametros.Operacion == enumTipoOperacion.Modificar)
            {
                ServicioDeCaches.EliminarElemento(nameof(LeerVistaMvc), $"{registro.Controlador}.{ registro.Accion}");
                ServicioDeCaches.EliminarElemento(nameof(ExtensionesDto.UrlParaMostrarUnDto), registro.ElementoDto);
            }

            ServicioDeCaches.EliminarCache(nameof(GestorDeArbolDeMenu.LeerArbolDeMenu));
        }
        public static TSource LeerCacheadoPorPropiedad <TSource>(this IQueryable <TSource> source, string nombrePropiedad, string valor, bool errorSiNoHay = true, bool errorSiHayMasDeUno = true) where TSource : INombre
        {
            var cache  = ServicioDeCaches.Obtener(typeof(TSource).FullName);
            var indice = $"{nameof(INombre.Nombre)}-{nombrePropiedad}-0";

            if (!cache.ContainsKey(indice))
            {
                var registros = source.Take(2).Where(x => x.Nombre.Equals(nombrePropiedad));

                if (registros.Count() == 0 && errorSiNoHay)
                {
                    GestorDeErrores.Emitir($"No se ha localizado el objeto con {nombrePropiedad} {valor} buscado en la entidad {typeof(TSource).Name}");
                }

                if (registros.Count() == 2 && errorSiHayMasDeUno)
                {
                    GestorDeErrores.Emitir($"Hay más de un objeto con {nombrePropiedad} {valor} buscado en la entidad {typeof(TSource).Name}");
                }

                cache[indice] = registros.ToList()[0];
            }
            return((TSource)cache[indice]);
        }
 protected override void DespuesDePersistir(TipoDeViaDtm registro, ParametrosDeNegocio parametros)
 {
     base.DespuesDePersistir(registro, parametros);
     ServicioDeCaches.EliminarElemento(typeof(TipoDeViaDtm).FullName, $"{nameof(TipoDeViaDtm.Sigla)}-{registro.ValorPropiedad(nameof(TipoDeViaDtm.Sigla))}-0");
 }
 public static void BorrarCache(string variable)
 {
     ServicioDeCaches.EliminarElemento(typeof(VariableDtm).FullName, variable);
 }
 protected override void DespuesDePersistir(MenuDtm registro, ParametrosDeNegocio parametros)
 {
     base.DespuesDePersistir(registro, parametros);
     ServicioDeCaches.EliminarCache(nameof(GestorDeArbolDeMenu.LeerArbolDeMenu));
 }
Beispiel #29
0
 internal void LimpiarCacheDeArbolDeMenu()
 {
     ServicioDeCaches.EliminarCache(nameof(this.LeerArbolDeMenu));
 }
        public bool TienePermisos(UsuarioDtm usuarioConectado, enumModoDeAccesoDeDatos permisosNecesarios, enumNegocio negocio)
        {
            if (!NegociosDeSe.UsaSeguridad(negocio))
            {
                return(true);
            }

            var estaActivo = NegocioActivo(negocio);

            if (!estaActivo && (permisosNecesarios == enumModoDeAccesoDeDatos.Administrador || permisosNecesarios == enumModoDeAccesoDeDatos.Gestor))
            {
                return(false);
            }

            if (usuarioConectado.EsAdministrador)
            {
                return(true);
            }

            if (negocio == enumNegocio.Variable)
            {
                switch (permisosNecesarios)
                {
                case enumModoDeAccesoDeDatos.Consultor: return(true);

                case enumModoDeAccesoDeDatos.Administrador: return(Contexto.DatosDeConexion.EsAdministrador);

                case enumModoDeAccesoDeDatos.Gestor: return(Contexto.DatosDeConexion.EsAdministrador);

                default:
                    throw new Exception($"Al elemto variable no se le puede acceder con el tipo de permiso: '{permisosNecesarios}'");
                }
            }

            var negocioDtm = LeerRegistroCacheado(nameof(NegocioDtm.Nombre), negocio.ToNombre(), errorSiNoHay: true, errorSiHayMasDeUno: true, aplicarJoin: false);
            var cache      = ServicioDeCaches.Obtener($"{nameof(GestorDeNegocios)}.{nameof(TienePermisos)}");
            var indice     = $"{usuarioConectado.Id}.{negocioDtm.Id}.{permisosNecesarios}";

            if (!cache.ContainsKey(indice))
            {
                var gestor = GestorDePermisosDeUnUsuario.Gestor(Contexto, Mapeador);

                var filtros = new List <ClausulaDeFiltrado>
                {
                    new ClausulaDeFiltrado {
                        Clausula = nameof(PermisosDeUnUsuarioDtm.IdUsuario), Criterio = CriteriosDeFiltrado.igual, Valor = usuarioConectado.Id.ToString()
                    }
                };

                if (permisosNecesarios == enumModoDeAccesoDeDatos.Administrador)
                {
                    filtros.Add(new ClausulaDeFiltrado {
                        Clausula = nameof(PermisosDeUnUsuarioDtm.IdPermiso), Criterio = CriteriosDeFiltrado.igual, Valor = negocioDtm.IdPermisoDeAdministrador.ToString()
                    });
                }

                if (permisosNecesarios == enumModoDeAccesoDeDatos.Gestor)
                {
                    filtros.Add(new ClausulaDeFiltrado {
                        Clausula = nameof(PermisosDeUnUsuarioDtm.IdPermiso), Criterio = CriteriosDeFiltrado.esAlgunoDe, Valor = $"{negocioDtm.IdPermisoDeGestor},{negocioDtm.IdPermisoDeAdministrador}"
                    });
                }

                if (permisosNecesarios == enumModoDeAccesoDeDatos.Consultor)
                {
                    filtros.Add(new ClausulaDeFiltrado {
                        Clausula = nameof(PermisosDeUnUsuarioDtm.IdPermiso), Criterio = CriteriosDeFiltrado.esAlgunoDe, Valor = $"{negocioDtm.IdPermisoDeConsultor},{negocioDtm.IdPermisoDeGestor},{negocioDtm.IdPermisoDeAdministrador}"
                    });
                }

                cache[indice] = gestor.Contar(filtros) > 0;
            }
            return((bool)cache[indice]);
        }