public PermisosDeUnUsuarioController(GestorDePermisosDeUnUsuario gestor, GestorDeErrores errores)
     : base
     (
         gestor,
         errores
     )
 {
 }
        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]);
        }