2015-01-15 4 views
7

Ho un sito costruito in codeigniter per il quale ho progettato un elenco di controllo degli accessi per gestire le autorizzazioni di diversi tipi di utenti. Vari utenti collegati al sito sono:Elenco controllo accessi per gestire la colonna del database che viene recuperata

  1. Super Admin
  2. Admin
  3. SEO utente
  4. Developer

Ora ho completato il controllo di accesso per questo e il permesso per aggiungere, aggiornare , elenco ed eliminazione possono essere assegnati a ogni utente tramite un modulo accessibile a Super Admin.

Now (questa è una parte del nuovo requisito del cliente) Voglio fare le colonne accessibili a determinati utenti, ad esempio:

Se una tabella Prodotti dispone di 4 Colonne

Products : 
id | Products | Price | Status 
-----+-----------+-------+---------- 
1 | prod1 | 20.0 | 1 
2 | prod2 | 35.6 | 0 

ora voglio che per Utenti SEO il Prezzo Colonna non viene visualizzato durante la quotazione.

NOTA: questo è solo un esempio, ho bisogno di rendere questo dinamico così l'amministratore controlla chi ha il permesso su quale colonna. Non posso semplicemente scrivere la logica If Else nel mio file di visualizzazione per escludere le colonne indesiderate.

Per favore dimmi come posso fare questo senza ridisegnare l'intero sistema o apportare modifiche molto importanti.

risposta

0

Ecco perché si utilizzano gli ACL. ACLS sono un modo dinamico per archiviare i privilegi. Spero che tu abbia un modello utente. In questo modello è necessario leggere gli ACL per l'utente corrente. imposti alcune costanti per il livello di accesso, simile a unix chmod. quindi costruisci un array con contiene tutte le colonne e il valore acl per questa colonna.

di costruire la vostra query, è possibile utilizzare metodi come

isSeo(); 

o

hasAccess($tableName); 

Naturalmente questo è un cambiamento importante, ma non so come si vorrebbe implementare ACL whichout cambiando il tuo codice.

+0

ho già avere queste funzioni per controllare i privilegi di tipo utente per qualsiasi tabella specifica. Tuttavia, quello che sto provando in questo momento è che voglio impostare i privilegi dell'utente su colonne specifiche di quella tabella. – Mohan

+0

Quindi suggerirei di aggiungere un parametro per la colonna: hasAccess ($ tableName, $ column); – Corni

0

Può essere provate procedure/funzioni memorizzati o provare a utilizzare SQL prime come questo

GRANT SELECT(id,Products,Status) ON Products TO 'SEO User'@'somehost'; 
1

È possibile utilizzare ion_auth biblioteca .. molto semplice da integrare e gestire gli utenti e livelli di accesso ...

Problemi correlati