Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

3.1.14 Verificación de código de acceso y nivel de permiso

Hola les comparto mi código...

He intentado realizarlo con una clase adcional a fin de que mantenga privados el codigo de acceso y niveles de permiso teniendo como ejemplo accesos por areas, sin embargo no he podido imaginar como usar correctamente los getters de cada area, por lo que finalmente termine utilizando un switch para los niveles de acceso, agradecería las sugerencias para la idea planteada o bien mejora del mi código.

CLASE Main

import java.util.Scanner;

public class Main extends Accesos{
    public static void main(String[] args) {
        int accesoNumericoUsuario;
        int permisoNumericoUsuario;

        Scanner scanner = new Scanner(System.in);
        System.out.println("Hola, ingrese su codigo de acceso: ");
        accesoNumericoUsuario = scanner.nextInt();
        System.out.println("Ingrese su nivel de permiso de acuerdo a su area: ");
        permisoNumericoUsuario = scanner.nextInt();

        Accesos usuario1 = new Accesos();
        if (accesoNumericoUsuario == usuario1.getAccesoNumerico()){
            switch (permisoNumericoUsuario){
                case 1:
                    System.out.println("Acceso permitido al area de Ciberseguridad. Bienvenido al sistema.");
                    break;
                case 2:
                    System.out.println("Acceso permitido al area de Programacion. Bienvenido al sistema");
                    break;
                case 3:
                    System.out.println("Acceso permitido al area de Gerencia. Bienvenido al sistema");
                    break;
                default:
                    System.out.println("Acceso denegado. Su area no se permite en el sistema");
            }
        } else {
            System.out.println("Acceso denegado. Codigo de acceso incorrecto");
        }
    }
}

CLASE Accesos

public class Accesos {
    private int accesoNumerico = 2023;
    // Simulacion de areas: 1 = ciberseguridad, 2 = programacion, 3 = gerencia;
    private int ciberseguridad = 1;
    private int programacion = 2;
    private int gerencia = 3;

    public int getAccesoNumerico() {
        return accesoNumerico;
    }

    public int getCiberseguridad() {
        return ciberseguridad;
    }

    public int getProgramacion() {
        return programacion;
    }

    public int getGerencia() {
        return gerencia;
    }
}
1 respuesta

Hola Nelli, espero que estés bien

Gracias por compartir tu código. Entiendo que quieres mantener privados el código de acceso y los niveles de permiso, y estás buscando una forma de usar getters para verificar los permisos en lugar de usar un switch. Aquí te dejo una sugerencia para mejorar tu código:

Podrías utilizar un método en la clase Accesos que verifique si el nivel de permiso es válido. Esto te permitirá encapsular la lógica de validación dentro de la clase Accesos, manteniendo así la privacidad de los atributos. Aquí tienes un ejemplo de cómo podrías hacerlo:

CLASE Accesos

public class Accesos {
    private int accesoNumerico = 2023;
    private int[] nivelesValidos = {1, 2, 3};

    public int getAccesoNumerico() {
        return accesoNumerico;
    }

    public boolean esNivelValido(int nivel) {
        for (int n : nivelesValidos) {
            if (n == nivel) {
                return true;
            }
        }
        return false;
    }

    public String obtenerNombreArea(int nivel) {
        switch (nivel) {
            case 1:
                return "Ciberseguridad";
            case 2:
                return "Programación";
            case 3:
                return "Gerencia";
            default:
                return "Área desconocida";
        }
    }
}

CLASE Main

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int accesoNumericoUsuario;
        int permisoNumericoUsuario;

        Scanner scanner = new Scanner(System.in);
        System.out.println("Hola, ingrese su codigo de acceso: ");
        accesoNumericoUsuario = scanner.nextInt();
        System.out.println("Ingrese su nivel de permiso de acuerdo a su area: ");
        permisoNumericoUsuario = scanner.nextInt();

        Accesos usuario1 = new Accesos();
        if (accesoNumericoUsuario == usuario1.getAccesoNumerico()) {
            if (usuario1.esNivelValido(permisoNumericoUsuario)) {
                String area = usuario1.obtenerNombreArea(permisoNumericoUsuario);
                System.out.println("Acceso permitido al área de " + area + ". Bienvenido al sistema.");
            } else {
                System.out.println("Acceso denegado. Nivel de permiso inválido.");
            }
        } else {
            System.out.println("Acceso denegado. Código de acceso incorrecto.");
        }
    }
}

Con este enfoque, la lógica de validación del nivel de permiso está encapsulada dentro de la clase Accesos, y puedes fácilmente modificar los niveles válidos sin cambiar la lógica principal en la clase Main. Además, el método obtenerNombreArea te ayuda a obtener el nombre del área correspondiente al nivel de permiso.

Espero que esta solución te sea útil y te ayude a mejorar tu código. ¡Bons estudios!