2011-11-04 3 views
5

Provare a costruire un micro-CMS (di sorta), che deve ripulire il contenuto, cioè solo le immagini, per il momento, per la persona che ha effettuato l'accesso tramite un nome utente/password.RBAC o ACL, per contenuti privati?

Diciamo che possono esserci 10K di tali utenti e ogni utente ha circa 100-1K immagini nel proprio account, che nessun altro dovrebbe essere in grado di visualizzare. Quale sarebbe l'approccio raccomandato per costruire un tale sistema?

Il mio istinto mi dice che ACL è l'approccio giusto, poiché i "ruoli" nel mio caso sono condivisi-nulla, quindi dovrei creare tanti ruoli quanti utenti. Sono diretto nel modo giusto?

risposta

4

Un tipo speciale di ruolo potrebbe essere un "ruolo proprietario". Questo ruolo si applica quando possiedi un oggetto. Un'idea per l'attuazione nel codice client:

if ($owner->isAllowed('view', $image) { do stuff } 

Il sistema RBAC:

// initiation of roles somewhere 
$this->roles->add(new OwnerRole($user); } 

// when called 
$roles = $this->getRoles($user); 
foreach ($roles as $role) { 
    if ($role->isAllowed($user, $action, $object)) { return true; } 
} 

Ciò significa che il proprietario di ruolo deve essere in grado di controllare chi possiede l'oggetto:

class OwnerRole implements Role 
{ 
    public function __construct(OwernChecker $ownerChecker) { 
     $this->owerChecker = $ownerChecker; 
    } 
    public function isAllowed(User $user, $action, $object) { 
     if ($this->ownerChecker->userOwnsObject($user, $object)) etc 
    } 
} 

Il L'oggetto ownerChecker può essere associato a come controllare che un utente possieda un oggetto.

la seguente lettura sono consigliate:
http://www.xaprb.com/blog/2006/08/16/how-to-build-role-based-access-control-in-sql/
http://www.sqlrecipes.com/database_design/fine_grained_role_based_access_control_rbac_system-3/

+0

impressionante +1 #### – HappyDeveloper