RBAC或ACL,用于私人内容?

ica*_*s74 5 php security django content-management-system

尝试构建一个微型CMS(各种类型),需要将内容(即图像)仅用于通过用户名/密码登录的人员.

假设可以有10K这样的用户,并且每个用户在他们自己的帐户中有大约100-1K图像,这是其他任何人都无法查看的.建立这样一个系统的建议方法是什么?

我的直觉告诉我ACL是正确的方法,因为我的案例中的"角色"是无共享的,所以我必须创建与用户一样多的角色.我是朝正确的方向前进的吗?

koe*_*oen 4

一种特殊的角色可能是“所有者角色”。当您拥有对象时,此角色适用。在客户端代码中实现的想法:

if ($owner->isAllowed('view', $image) { do stuff }
Run Code Online (Sandbox Code Playgroud)

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; }
}
Run Code Online (Sandbox Code Playgroud)

这意味着所有者角色必须能够检查谁拥有该对象:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

可以为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/