2011-11-04 13 views
5

Tratando de construir un micro-CMS (de tipo), que necesita repartir contenido, es decir, imágenes, por el momento, a la persona que inició sesión con un nombre de usuario/contraseña.RBAC o ACL, para contenido privado?

Digamos que puede haber 10K usuarios de este tipo, y cada usuario tiene aproximadamente 100-1K imágenes en su propia cuenta, que nadie más debería poder ver. ¿Cuál sería el enfoque recomendado para construir tal sistema?

Mis instintos me dicen que ACL es el enfoque correcto, ya que los "roles" en mi caso son compartidos, nada, así que tendría que crear tantos roles como usuarios. ¿Me dirijo de la manera correcta?

Respuesta

4

Un tipo especial de rol podría ser un "rol de propietario". Esta función se aplica cuando posee un objeto. Una idea para su implementación en código de cliente:

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

El 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; } 
} 

Esto significa que el propietario del rol debe ser capaz de verificar que posee el objeto:

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 
    } 
} 

El El objeto ownerChecker puede recibir asignaciones de cómo verificar que un usuario posee un objeto.

La siguiente lectura se recomienda:
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

impresionante 1 #### – HappyDeveloper