2011-11-04 27 views
5

Đang cố gắng để xây dựng một vi-CMS (các loại), mà cần phải món ăn ra nội dung ví dụ: hình ảnh duy nhất, cho thời điểm này, để người đăng nhập thông qua một tên người dùng/mật khẩu.RBAC hoặc ACL, cho nội dung riêng tư?

Giả sử có thể có 10 nghìn người dùng như vậy và mỗi người dùng có khoảng 100-1K hình ảnh trong tài khoản của riêng họ, mà không ai khác sẽ có thể xem. Cách tiếp cận được khuyến nghị để xây dựng một hệ thống như thế nào?

bản năng của tôi nói với tôi rằng ACL là cách tiếp cận đúng, vì "vai trò" trong trường hợp của tôi là chia sẻ-không có gì, vì vậy tôi sẽ phải tạo bao nhiêu vai trò như người sử dụng. Tôi có đi đúng hướng không?

Trả lời

4

Một loại đặc biệt của vai trò có thể là một 'chủ sở hữu vai trò'. Vai trò này được áp dụng khi bạn sở hữu một đối tượng. Một ý tưởng để thực hiện trong mã khách hàng:

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

Hệ thống 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; } 
} 

này có nghĩa là chủ sở hữu vai trò phải có khả năng kiểm tra những người sở hữu đối tượng:

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

Các đối tượng ownerChecker có thể được đưa ra ánh xạ về cách kiểm tra người dùng sở hữu một đối tượng.

Sau đây đọc được đề nghị:
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

tạo ảnh vui nhộn 1 #### – HappyDeveloper

Các vấn đề liên quan