public bool ValidarPermisosDePersistencia(enumTipoOperacion operacion, enumNegocio negocio, TRegistro registro)
        {
            if (Contexto.DatosDeConexion.EsAdministrador || negocio == enumNegocio.No_Definido || !NegociosDeSe.UsaSeguridad(negocio))
            {
                return(true);
            }

            if (!Contexto.DatosDeConexion.EsAdministrador && NegociosDeSe.EsDeParametrizacion(negocio))
            {
                GestorDeErrores.Emitir($"El usuario {Contexto.DatosDeConexion.Login} no tiene permisos de parametrización sobre el negocio {negocio.ToNombre()}");
            }

            var modoAcceso  = LeerModoDeAccesoAlNegocio(Contexto.DatosDeConexion.IdUsuario, negocio);
            var hayPermisos = modoAcceso == enumModoDeAccesoDeDatos.Administrador;

            if (!hayPermisos)
            {
                if (operacion == enumTipoOperacion.Insertar)
                {
                    hayPermisos = modoAcceso == enumModoDeAccesoDeDatos.Gestor;
                }
                else
                {
                    var modoAccesoElemento = LeerModoDeAccesoAlElemento(Contexto.DatosDeConexion.IdUsuario, negocio, registro.Id);
                    hayPermisos = modoAccesoElemento == enumModoDeAccesoDeDatos.Gestor || modoAccesoElemento == enumModoDeAccesoDeDatos.Administrador;
                }
            }

            //var gestorDeNegocio = Gestores<TContexto, NegocioDtm, NegocioDto>.Obtener(Contexto, Mapeador, "Negocio.GestorDeNegocio");
            //var negocioDtm = gestorDeNegocio.LeerRegistroCacheado(nameof(NegocioDtm.Nombre), NegociosDeSe.ToString(negocio));
            //var cache = ServicioDeCaches.Obtener($"{nameof(GestorDeElementos)}.{nameof(ValidarPermisosDePersistencia)}");
            //var indice = $"Usuario:{idUsuario} Permiso:{negocioDtm.IdPermisoDeGestor}";

            //if (!cache.ContainsKey(indice))
            //{
            //    var gestorDePermisosDeUnUsuario = Gestores<TContexto, PermisosDeUnUsuarioDtm, PermisosDeUnUsuarioDto>.Obtener(Contexto, Mapeador, "Entorno.GestorDePermisosDeUnUsuario");
            //    var filtros = new List<ClausulaDeFiltrado>();
            //    filtros.Add(new ClausulaDeFiltrado { Clausula = nameof(PermisosDeUnUsuarioDtm.IdUsuario), Criterio = CriteriosDeFiltrado.igual, Valor = idUsuario.ToString() });
            //    filtros.Add(new ClausulaDeFiltrado { Clausula = nameof(PermisosDeUnUsuarioDtm.IdPermiso), Criterio = CriteriosDeFiltrado.esAlgunoDe, Valor = $"{negocioDtm.IdPermisoDeGestor},{negocioDtm.IdPermisoDeAdministrador}" });

            //    if (gestorDePermisosDeUnUsuario.Contar(filtros) == 0)
            //        GestorDeErrores.Emitir($"El usuario {Contexto.DatosDeConexion.Login} no tiene permisos para {operacion.ToString().ToLower()} los datos de {NegociosDeSe.ToString(negocio)}");

            //    cache[indice] = true;
            //}
            //return (bool)cache[indice];

            return(hayPermisos);
        }
        public ParametrosDeNegocio(enumTipoOperacion tipo, bool aplicarJoin = true)
        {
            Operacion = tipo;

            if (tipo == enumTipoOperacion.LeerConBloqueo)
            {
                LeerParaActualizar = true;
            }

            if (tipo == enumTipoOperacion.LeerSinBloqueo)
            {
                LeerParaActualizar = false;
            }

            AplicarJoin = aplicarJoin;
        }
        public static string ToBd(this enumTipoOperacion tipo)
        {
            switch (tipo)
            {
            case enumTipoOperacion.Insertar: return("I");

            case enumTipoOperacion.Modificar: return("M");

            case enumTipoOperacion.LeerConBloqueo: return("L");

            case enumTipoOperacion.LeerSinBloqueo: return("X");

            case enumTipoOperacion.NoDefinida: return("N");

            case enumTipoOperacion.Eliminar: return("E");

            case enumTipoOperacion.Contar: return("C");
            }

            throw new Exception($"No se ha definidocomo registrar en la BD la operación {tipo}");
        }
Ejemplo n.º 4
0
        public static void RegistrarAuditoria(ContextoSe contexto, enumNegocio negocio, enumTipoOperacion operacion, IElementoDtm auditar)
        {
            auditar.UsuarioModificador = auditar.UsuarioCreador = null;
            var valor = serializarPropiedadesPOCO(auditar);

            var sentencia = $@"Insert into {GeneradorMd.EsquemaDeTabla(negocio.TipoDtm())}.{GeneradorMd.NombreDeTabla(negocio.TipoDtm())}_AUDITORIA (id_elemento, id_usuario, operacion, registro, auditado_el) 
                               values ({((ElementoDtm)auditar).Id}
                                      ,{contexto.DatosDeConexion.IdUsuario}
                                      ,'{operacion.ToBd()}'
                                      ,'{valor}'
                                      ,'{DateTime.Now}')";

            contexto.Database.ExecuteSqlRaw(sentencia);
        }