Devi definire le autorizzazioni per i ruoli, non per gli utenti. Agli utenti viene assegnato un ruolo che specifica il tipo di accesso che ha su una determinata pagina. Dai uno sguardo allo schema seguente:
I buoni esempi di ruoli potrebbero essere "manager", "admin", "user", "public". Il vantaggio di farlo in questo modo è che i ruoli sono facili da modificare in seguito. Se aggiungi una pagina e decidi che solo gli amministratori possono accedervi, cambiarla è semplice come cambiare il ruolo di amministratore e tutti gli utenti con quel ruolo prenderanno la modifica.
RolePermissions è il luogo in cui inserirai le autorizzazioni per le singole pagine. Dovrebbe avere un nome (che farai riferimento nel tuo programma come chiave, o direttamente dal nome della risorsa, anche se lo consiglierei per chiave), e una serie di permessi. È probabile che le autorizzazioni tipiche siano la vista, l'aggiornamento, la creazione e l'eliminazione, sebbene sia necessario creare almeno un paio di campi aggiuntivi per le autorizzazioni personalizzate che potrebbero essere specifiche per la pagina. View è un'abilitazione speciale che determinerà se l'utente può visualizzare o meno quella pagina e, in caso contrario, dovresti reindirizzare a una pagina di errore 401 oa una pagina di accesso.
C'è anche il problema di cosa fare se non riesci a trovare i permessi per una determinata pagina. Il mio pensiero è che si possa automaticamente presumere che l'utente non abbia le autorizzazioni per visualizzare quella pagina, tuttavia un approccio alternativo potrebbe essere quello di avere un ruolo speciale che non può (o non dovrebbe almeno) essere cancellato chiamato public. Se ti trovi nella circostanza che il ruolo di un utente non mostra esplicitamente le autorizzazioni, puoi fare automaticamente riferimento alle autorizzazioni di ruolo pubbliche per il comportamento corretto. In questo modo, in ultima analisi, devi solo specificare autorizzazioni che concedono più leniancy al ruolo di autorizzazione non pubblico piuttosto che dover sempre specificare autorizzazioni per ogni pagina e ruolo.
Le informazioni di accesso dovrebbero essere conservate nella tabella Utenti e dovrebbero essere separate dalle autorizzazioni. Anche come @Encaitar ha menzionato nella sua risposta, sarebbe saggio gestire gli hash delle password, e non le password stesse, crittografate o altrimenti.