Gestione delle Autorizzazioni tramite Modificatori in Solidity

by theArchitect
SHARE
Gestione delle Autorizzazioni tramite Modificatori in Solidity
© Guida-HTML5.it

Introduzione

In questo tutorial, esploreremo come utilizzare i modificatori in Solidity per gestire le autorizzazioni nei contratti decentralizzati. I modificatori sono una potente funzionalità di Solidity che consente di riutilizzare il codice e di applicare logiche di controllo degli accessi in modo semplice ed efficace. Impareremo a creare un contratto che utilizza i modificatori per limitare l´accesso a determinate funzioni in base ai ruoli degli utenti.

Codice completo


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract RuoliAutorizzazione {
    address public proprietario;
    mapping(address => bool) public amministratori;
    mapping(address => bool) public utenti;

    // Eventi per il logging delle azioni
    event AmministratoreAggiunto(address indexed amministratore);
    event AmministratoreRimosso(address indexed amministratore);
    event UtenteAggiunto(address indexed utente);
    event UtenteRimosso(address indexed utente);

    // Modificatore per limitare l´accesso al proprietario
    modifier soloProprietario() {
        require(msg.sender == proprietario, "Solo il proprietario può eseguire questa operazione.");
        _;
    }

    // Modificatore per limitare l´accesso agli amministratori
    modifier soloAmministratore() {
        require(amministratori[msg.sender], "Solo gli amministratori possono eseguire questa operazione.");
        _;
    }

    constructor() {
        proprietario = msg.sender; // Imposta il creatore del contratto come proprietario
    }

    // Funzione per aggiungere un amministratore
    function aggiungiAmministratore(address _amministratore) public soloProprietario {
        amministratori[_amministratore] = true;
        emit AmministratoreAggiunto(_amministratore);
    }

    // Funzione per rimuovere un amministratore
    function rimuoviAmministratore(address _amministratore) public soloProprietario {
        amministratori[_amministratore] = false;
        emit AmministratoreRimosso(_amministratore);
    }

    // Funzione per aggiungere un utente
    function aggiungiUtente(address _utente) public soloAmministratore {
        utenti[_utente] = true;
        emit UtenteAggiunto(_utente);
    }

    // Funzione per rimuovere un utente
    function rimuoviUtente(address _utente) public soloAmministratore {
        utenti[_utente] = false;
        emit UtenteRimosso(_utente);
    }

    // Funzione per verificare se un indirizzo è un utente
    function èUtente(address _utente) public view returns (bool) {
        return utenti[_utente];
    }
}

Spiegazione

Il contratto RuoliAutorizzazione gestisce due ruoli principali: il proprietario e gli amministratori. Il proprietario è colui che ha creato il contratto e ha il potere di aggiungere o rimuovere amministratori. Gli amministratori, a loro volta, possono gestire gli utenti.

Abbiamo definito due modificatori:

  • soloProprietario: consente l´accesso solo al proprietario del contratto.
  • soloAmministratore: consente l´accesso solo agli indirizzi che sono stati designati come amministratori.

Ogni volta che un amministratore o un utente viene aggiunto o rimosso, viene emesso un evento per tenere traccia delle modifiche. Questo è utile per la trasparenza e per il monitoraggio delle azioni nel contratto.

Best practice

  • Utilizzare eventi: Gli eventi sono fondamentali per il tracciamento delle azioni nel contratto. Assicurati di emettere eventi per ogni operazione che modifica lo stato del contratto.
  • Limitare l´accesso: Utilizza i modificatori per limitare l´accesso alle funzioni critiche. Questo aumenta la sicurezza del contratto e riduce il rischio di accessi non autorizzati.
  • Testare il contratto: Prima di distribuire il contratto sulla rete principale, esegui test approfonditi su una rete di test per garantire che tutte le funzioni e i modificatori funzionino come previsto.
  • Documentazione: Documenta il tuo codice e le tue funzioni. Questo aiuta altri sviluppatori (e te stesso in futuro) a capire rapidamente come funziona il contratto.

Riepilogo

In questo tutorial, abbiamo visto come implementare un sistema di gestione delle autorizzazioni utilizzando i modificatori in Solidity. Abbiamo creato un contratto che consente al proprietario di gestire gli amministratori e agli amministratori di gestire gli utenti. I modificatori ci hanno permesso di semplificare il controllo degli accessi e di rendere il codice più leggibile e manutenibile.

Approfondisci con risorse ufficiali

SHARE