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 bool NegocioActivo(enumNegocio negocio) { if (negocio == enumNegocio.No_Definido) { return(true); } if (!NegociosDeSe.UsaSeguridad(negocio)) { return(true); } var registro = LeerRegistroCacheado(nameof(NegocioDtm.Nombre), negocio.ToNombre(), false, true, false); if (registro == null) { GestorDeErrores.Emitir($"El negocio de {NegociosDeSe.ToNombre(negocio)} no está definido, y se ha indicado por programa que usa seguridad, defínalo como negocio"); } return(registro.Activo); }
private List <ModoDeAccesoAlNegocioDtm> ModosDeAccesoAlNegocio(int idUsuario, enumNegocio negocio) { var nombreNegocio = negocio.ToNombre(); var modosDeAcceso = Contexto .ModoAccesoAlNegocio .FromSqlInterpolated($@" SELECT ID , ADMINISTRADOR , GESTOR , CONSULTOR , IDUSUA , IDPERMISO , ORIGEN FROM NEGOCIO.MODO_ACCESO_AL_NEGOCIO_POR_USUARIO({nombreNegocio},{idUsuario}) " ).ToList(); return(modosDeAcceso); }
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]); }
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); }