Funcions de la pràctica 5.3

De Wiki personal d'en Guillem Serrat

encriptar_contrasenya

Aquesta funció rep una contrasenya i retorna aquesta mateixa contrasenya encriptada (hash)

Durant l’enregistrament d’usuaris, modificació de perfil o restabliments de contrasenya, l’usuari introdueix una contrasenya en text pla que s’ha de desar a la BD, i per questions òbvies de seguretat, no es pot desar una contrasenya en text pla, sinó que s’ha d’encriptar

Per encriptar la contrasenya es fa servir la funció interna de PHP password_hash on els seus paràmetres són la contrasenya a encriptar i el mètode d'encriptació, en aquest cas, el mètode per defecte

function encriptar_contrasenya($contrasenya): string {
    return password_hash($contrasenya, PASSWORD_DEFAULT);
}

verificar_contrasenya

Aquesta funció rep una contrasenya i un hash i retorna aquesta un valor boleà depenent si la contrasenya coincideix amb el hash o no.

Durant l’autenticació d’usuaris, l’usuari introdueix la seva contrasenya en text pla, però la contrasenya desada a la BD no és en text pla, sinó que és un hash

Per comprovar si la contrasenya correspon a un hash es fa servir la funció interna de PHP password_verify on els seus paràmetres són la contrasenya en text pla i el hash.

function verificar_contrasenya($contrasenya, $hash): bool {
    return password_verify($contrasenya, $hash);
}

registrar_activitat

Aquesta funció rep la connexió de la BD, la ID de l’usuari i l’acció realitzada. Aquesta funció no retorna cap valor ja que el seu objectiu és actualitzar la BD.

Durant l’execució de l’aplicació, es realitzaran diferents accions que es desaran a una taula de la BD registrant la data, la IP de l’equip i el tipus d’acció realitzada.

Per això, executarem un Insert a la BD amb les dades que hem rebut.

function registrar_activitat($pdo, $usuari_id, $accio): void {
    $ip = $_SERVER['REMOTE_ADDR'];
    $stmt = $pdo->prepare("INSERT INTO activitat (usuari_id, accio, ip_client) VALUES (?, ?, ?)");
    $stmt->execute([$usuari_id, $accio, $ip]);  
}

esta_autenticat

Aquesta funció no rep cap paràmetre i retorna un valor boleà depenent de si l’usuari està autenticat o no.

Per evitar que usuaris no autenticats puguin accedir a pàgines privades, hem de verificar que l’usuari estigui autenticat.

Per això, comprovarem que s’ha iniciat una sessió i que el vector “autenticat” de l’usuari de la sessió sigui verdader

function esta_autenticat(): bool {
    return isset($_SESSION['usuari']) && $_SESSION['usuari']['autenticat'] === true;
}

requerir_autenticacio

Aquesta funció no rep cap paràmetre ni retorna cap valor.

Mentre que la funció esta_autenticat únicament retorna si l’usuari està o no autenticat, aquesta funció comprova si ho està o no, i en cas negatiu, redirigeix l’usuari a la pàgina de login.

Per això comprovem que resultat de la funció esta_autenticat sigui fals (és a dir, no està autenticat), i enviem l’usuari a la pàgina de login

function requerir_autenticacio(): void {
    if (esta_autenticat() == false) {
        header('Location: login.php');
        exit;
    }
}

es_admin

Aquesta funció no rep cap paràmetre i retorna un valor boleà depenent si l’usuari és administrador o no.

A l’aplicació existeix un espai privat que només els administradors poden accedir, és per això que abans de permetre l’entrada a un usuari, hem d’assegurar-nos que sigui administrador, tant visualitzador com editor.

Per això, recuperem el vector “rol” de la sessió, que indica el tipus d’usuari que és, i comprovem si el valor és “ed_admin” o “vi_admin”

function es_admin(): bool {
    return isset($_SESSION['usuari']['rol']) && in_array($_SESSION['usuari']['rol'], ['ed_admin', 'vi_admin'], true);
}

es_admin_ed

Aquesta funció no rep cap paràmetre i retorna un valor boleà depenent si l’usuari és administrador editor o no.

Dins de l’espai privat dels administradors, existeix un apartat on es pot modificar les contrasenyes d’altres usuaris i desbloquejar comptes. Aquesta secció únicament pot tenir accés l’administrador editor.

Per això, recuperem el vector “rol” de la sessió, que indica el tipus d’usuari que és, i comprovem si el valor és “ed_admin” exclusivament.

function es_admin_ed(): bool {
    return isset($_SESSION['usuari']['rol']) && ($_SESSION['usuari']['rol'] === 'ed_admin');
}