#php #django #content-management-system #security
#php #django #content-management-system #Безопасность
Вопрос:
Пытаюсь создать микро-CMS (своего рода), которая на данный момент должна передавать контент, то есть только изображения, пользователю, вошедшему в систему через имя пользователя / пароль.
Допустим, таких пользователей может быть 10 тыс., и у каждого пользователя в их собственной учетной записи около 100-1 тыс. изображений, которые никто другой не должен иметь возможности просматривать. Каков был бы рекомендуемый подход к созданию такой системы?
Мои инстинкты подсказывают мне, что ACL — это правильный подход, поскольку «роли» в моем случае являются общими — ничего, поэтому мне пришлось бы создавать столько ролей, сколько пользователей. Я правильно направляюсь?
Ответ №1:
Особым видом роли может быть «роль владельца». Эта роль применяется, когда вы являетесь владельцем объекта. Идея для реализации в клиентском коде:
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/