2011-11-04 39 views
5

試圖構建一個微CMS(各種),它需要將內容(即僅圖像)暫時存放在通過用戶名/密碼登錄的用戶。RBAC或ACL,用於私人內容?

假設可以有10K個這樣的用戶,並且每個用戶在他們自己的賬戶中有大約100-1K個圖像,其中沒有其他人應該能夠查看。建立這樣一個系統的建議方法是什麼?

我的直覺告訴我,ACL是正確的方法,因爲我的情況中的「角色」是無共享的,所以我必須創建與用戶一樣多的角色。我的方式是否正確?

回答

4

一種特殊的角色可能是「所有者角色」。這個角色適用於你擁有一個對象的情況。在客戶端代碼執行一個想法:

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

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

這意味着所有者的角色必須能夠檢查誰擁有對象:

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

的ownerChecker對象可以被賦予如何檢查用戶擁有對象的映射。

以下是推薦閱讀:
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

真棒+1 #### – HappyDeveloper