2011-11-04 20 views
5

Próba zbudowania mikro-CMS (sortów), który musi rozdawać treści, tj. Tylko obrazy, na chwilę, do osoby zalogowanej za pomocą nazwy użytkownika/hasła.RBAC lub ACL dla treści prywatnych?

Załóżmy, że może być 10 tys. Takich użytkowników, a każdy użytkownik ma około 100-1 000 zdjęć na swoim koncie, które nikt inny nie może wyświetlić pod innym numerem:. Jakie byłoby zalecane podejście do budowy takiego systemu?

Moje instynkty mówią mi, że ACL jest właściwym podejściem, ponieważ "role" w moim przypadku są wspólne - nic, więc musiałbym stworzyć tyle ról, ile użytkowników. Czy jestem na dobrej drodze?

Odpowiedz

4

Szczególnym rodzajem roli może być "rola właściciela". Ta rola ma zastosowanie, gdy jesteś właścicielem obiektu. Pomysł na realizację w kodzie klienta:

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

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

Oznacza to, że właściciel-rola musi być w stanie sprawdzić, kto jest właścicielem obiektu:

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

Właścicielowi obiektu ownerChecker można przypisać mapowanie sposobu sprawdzenia, czy użytkownik jest właścicielem obiektu.

Poniższy zaleca czytanie:
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

Niesamowite +1 #### – HappyDeveloper