RBAC или ACL, для частного контента? - PullRequest
5 голосов
/ 04 ноября 2011

Попытка создать микро-CMS (своего рода), которая должна распределять контент, т.е. только изображения, на тот момент, когда человек вошел в систему через имя пользователя / пароль.

Допустим, что10K таких пользователей, и каждый пользователь имеет около 100-1K изображений в своей учетной записи, которые никто другой не должен просматривать.Каков будет рекомендуемый подход к построению такой системы?

Мои инстинкты говорят мне, что ACL - это правильный подход, так как «роли» в моем случае не используются совместно, поэтому мне придется создать какмного ролей в качестве пользователей.Я направился в правильном направлении?

1 Ответ

4 голосов
/ 11 ноября 2011

Особой ролью может быть «роль владельца».Эта роль применяется, когда вы владеете объектом.Идея для реализации в клиентском коде:

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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...