2011-01-11 15 views
5

Sto creando un sistema CMS fotografico personalizzato e ho bisogno di implementare un sistema di autenticazione e permessi utente. Quali sono le solite pratiche nel settore per andare sulla creazione di tale schema.Come strutturare le autorizzazioni utente per un cms

Fondamentalmente ho bisogno di avere utenti, e gli utenti possono essere di diverso tipo. Alcuni utenti dicono che possono solo creare gallerie, altri possono solo modificarle o modificare solo alcune gallerie, ecc. Quindi come dovrebbe essere strutturato. Sto usando il database MySQL e sto usando PHP per codificare il CMS.

Ho provato a cercare su Google ma ho trovato solo articoli che spiegano come creare utenti per l'attuale database MySQL. Apprezzerò un collegamento a un articolo che spiega come questo tipo di cose dovrebbe essere fatto.

Grazie in anticipo.

+0

Cerca in Live_User PEAR. È un po 'vecchio e non è mai diventato uno standard, ma gestisce la maggior parte delle autorizzazioni di microgestione. – mario

risposta

5

Esistono due approcci comuni a questo problema, entrambi comportano la divisione delle operazioni consentite in qualcosa di discreto che è possibile nominare. (Elimina post, crea gallerie, aggiorna il codice, scarica il database, lancia i missili, apri la porta del garage.) Dai a ciascuno di questi una bitmap in un bitvector (se hai intenzione di avere meno di 32 permessi, questo è un bel e meccanismo di archiviazione compatto, se pensi che crescerà oltre 32 autorizzazioni, la dimensione di un intero tipico, quindi forse una tabella nel tuo database ..)

Quindi, puoi mappare gli utenti direttamente ai permessi ("I desidera concedere gallery_create-sarnold ") oppure è possibile mappare gli utenti ei permessi tramite classi di utenti (" voglio concedere gallery_create a tutti i membri della classe art_curator, poi voglio promuovere utente sarnolddocent-art_curator ").

Se si mappano gli utenti direttamente ai permessi, è possibile che in anni successivi si verifichi un intreccio di strane autorizzazioni nell'implementazione. Se si associano gli utenti alle classi, è possibile che vi troviate con classi artificiali di utenti perché ci si è fidati di una persona specifica con un privilegio, ma non di altri privilegi.

Capire il modo migliore per affrontare questa mappatura è ancora un problema aperto; Ho scritto su diversi tipi di modelli di permesso Modelling a permissions system che potrebbero essere troppi o potrebbero essere troppe poche informazioni, a seconda di quanto complicato vorreste che il vostro sistema diventasse.

Se si desidera solo autorizzazioni di archivio in bitmap (ad esempio, l'implementazione del kernel di Linux di CAPABLE() per CAP_SYS_ADMIN, CAP_DAC_OVERRIDE, e così via), allora si potrebbe aggiungere nuovi privilegi con qualcosa di molto semplice:

if (requested_new_permission == "CAP_SYS_ADMIN") 
    user->permissions |= CAP_SYS_ADMIN; 
else if (requested_new_permissions == "CAP_DAC_OVERRIDE") 
    user->permissions |= CAP_DAC_OVERRIDE; 

...

Poi, quando è necessario per testare le capacità:

if (CAPABLE(user, CAP_SYS_ADMIN)) 
    reboot_server(); 

e la macro CAPABLE() può apparire come:

#define IN GRADO (utente, cap) ((utente) -> permessi & (PAC))

(Perdonate la C, io proprio non lo so php molto bene; Sono stato costretto a sistemare troppi bug php per volerlo imparare da solo.)

Se si desidera mappare gli utenti alle autorizzazioni per le classi di utenti, allora potrebbe essere tre tabelle: una tabella users, un tavolo o groupsclasses, e un tavolo da permissions. classes ha colonne per user_id e permission_id. Quando è necessario verificare se è possibile concedere un'autorizzazione, selezionare la classe dell'utente, quindi selezionare l'autorizzazione nella classe. (Sono passati anche anni da quando ho scritto a mano SQL, sono sicuro che una singola query può darti una risposta sì o no, ma non sono sicuro se sarebbe un join di più tabelle o usare sottoquery o se sarebbe solo più facile fare due query al database. :)

Spero che questo aiuti.

Problemi correlati