public async Task <bool> Authorize(Accion action) { Guard.AgainstArgumentNull(action, "action"); //1. Obtener usuario actual var usuario = _application.GetCurrentUser(); if (usuario == null) { return(false); } log.DebugFormat("Verificar permiso de la accion {0} en la funcionalidad {1} para el usuario [{2}-{3}]", action.Codigo, action.FuncionalidadId, usuario.Cuenta, usuario.Nombres); //Verificar si la accion se encuentra en las funcionalidades del modulo autentificado var modulo = _application.GetCurrentModule(); var verificarAccionModuloAutentificado = (await ModuloService.GetModuleAndFunctionality(modulo.Id)).Funcionalidades.Any(f => f.Id == action.FuncionalidadId); if (!verificarAccionModuloAutentificado) { log.DebugFormat("La accion {0}, no se encuentra en las funcionalidades del modulo autentificado {1}", action.Codigo, modulo.Codigo); return(false); } if (usuario.Roles.Where(r => r.EsAdministrador).Any()) { log.DebugFormat("El usuario {0}, posee un rol que es administrador", usuario.Cuenta); return(true); } //1. Obtener listado de Roles/Permisos asociadas al usuario autentificado var roles = (await RolService.GetAllRolAndPermissions()) .Where(r => usuario.Roles.Any(rUser => rUser.Id == r.Id)).ToList(); //2. Recuperar Permisos que posee el rol Autentificado var permisos = (from r in roles where r.Permisos.Any(p => p.AccionId == action.Id) select r.Permisos).ToList(); if (permisos.Any()) { return(true); } return(false); }