struttura dei permessi IRC Bot, approccio migliore?

4

Sto creando un bot IRC in PHP. E sono giunto al punto in cui ho bisogno di determinare in che modo le autorizzazioni / gli accessi degli utenti verrebbero visualizzati nel database (e nell'applicazione in generale).

Ecco i requisiti:

  • Esistono autorizzazioni globali e locali, globali per tutti i canali, mentre locali sono specifici del canale.
  • Ci sono permessi come "root", "bot_admin" "glob_op" "op on #channel", in questo esempio, ognuno è più debole dell'ultimo (root è il più strong, il che significa che nessuno può intraprendere azioni contro root) .
  • Non ho completamente deciso esattamente quante autorizzazioni ci sono, e il bot sarà estensibile, quindi ci deve essere un'opzione di espansione.

Alcuni approcci che avevo in mente:

  • Assegna a ciascun livello di autorizzazione un numero (1, 2, 4, 8, 16) e aggiungili insieme per formare il livello di accesso di un utente specifico (anche aggiungendo tutti i numeri fino a n-1 , sarebbero comunque inferiori di n ). Per quanto riguarda l'espansione, potrei lasciare degli spazi (1, 16, 256, ecc.) E riempirla in seguito. Non penso che sia molto buono, in quanto sarebbe difficile da mantenere e leggere in seguito, anche se uso costanti per renderlo più leggibile.
  • Avere ciascuna autorizzazione nella propria colonna booleana. Sembra un po 'sciocco, e non esiste un modo semplice per determinare le relazioni di potere tra ogni ruolo.

Quindi cosa ne dici? Ho un approccio migliore che posso prendere?

    
posta Madara Uchiha 17.02.2012 - 22:59
fonte

1 risposta

1

Mi piace non affidarmi troppo allo schema del database. Rende più difficili le modifiche successive.

Avrei una tabella

users: <user-id> <user name> 

un'altra tabella

local-permissions: <user-id> <channel(-id)> <permission>

e ancora un'altra tabella:

global-permissions: <user-id> <permission>

Vorrei usare una colonna String per l'autorizzazione, se vuoi puoi usare un database: controlla i valori consentiti. È più facile leggere e scrivere se stai manipolando il database direttamente (cosa che farai a un certo punto).

Poiché desideri autorizzazioni multiple, inserisci più righe nelle tabelle e poi calcola la gerarchia nell'applicazione.

Se vuoi rendere più visibili le autorizzazioni di un particolare utente, puoi anche scegliere una sola riga / voce e separarle per spazio nella colonna in questo modo: "op kick ban" (essere tollerante ai guasti in l'applicazione per quello!).

Non sembra carino, ma come ho detto, preferisco avere lo schema / interpretazione dei dati nell'applicazione, quindi nel database.

    
risposta data 20.02.2012 - 18:36
fonte

Leggi altre domande sui tag