Столбец таблицы ролей администратора role_type
Вопрос
в admin_role
таблица есть столбец role_type
который может иметь 2 значения:
- 'Г' -
Mage_Admin_Model_Acl::ROLE_TYPE_GROUP
- 'У' -
Mage_Admin_Model_Acl::ROLE_TYPE_USER
По их именам я делаю вывод, что один для пользовательских ролей, а другой для групповых ролей, но я не могу понять, как используются эти значения.
AFAIK каждый пользователь-администратор, чтобы иметь доступ к некоторым областям администрирования, должен иметь роль.Это роль «группы»?Если да, то какая польза от U
ценить.Если нет, то что тогда такое «группа»?
Версия Magento не важна.Он существует со времен «большого взрыва» (v0.7) и даже перенесен в следующую вселенную (Magento 2).
Решение
Да, это «группа».У каждого пользователя есть роль пользователя, которая является родительской по отношению к роли группы. Все пользователи назначаются группе через родительский_ид в этой таблице.
Единственная реальная ценность, которую я вижу, - это генерация acl, где они могут сбросить всю таблицу и сгенерировать структуру acl на основе предоставленной информации в Mage_Admin_Model_Resource_Acl::loadRoles.
public function loadRoles(Mage_Admin_Model_Acl $acl, array $rolesArr)
{
foreach ($rolesArr as $role) {
$parent = ($role['parent_id'] > 0) ? Mage_Admin_Model_Acl::ROLE_TYPE_GROUP . $role['parent_id'] : null;
switch ($role['role_type']) {
case Mage_Admin_Model_Acl::ROLE_TYPE_GROUP:
$roleId = $role['role_type'] . $role['role_id'];
$acl->addRole(Mage::getModel('admin/acl_role_group', $roleId), $parent);
break;
case Mage_Admin_Model_Acl::ROLE_TYPE_USER:
$roleId = $role['role_type'] . $role['user_id'];
if (!$acl->hasRole($roleId)) {
$acl->addRole(Mage::getModel('admin/acl_role_user', $roleId), $parent);
} else {
$acl->addRoleParent($roleId, $parent);
}
break;
}
}
return $this;
}
Похоже, они могли бы использовать ($role['parent_id'] > 0), чтобы определить, является ли это ролью группы или пользователя, но я думаю, что это весьма подвержено ошибкам.
Другие советы
Суммируя:То, что вы называете «роль», — это группа (например, «Администраторы»).
В каждой группе есть запись типа G
и у каждого пользователя есть запись типа U
который относится к группе пользователя через parent_id
.Все правила доступа определяются на уровне группы.Если вы посмотрите на таблицу admin_rules
, вы увидите, что все записи имеют G
как тип роли.
А admin_rule.role_type
функция, кажется, что-то вроде stock_id
, каким-то образом задуманный, так и не реализованный полностью, а затем реализованный, потому что никто не смеет его трогать.
Из любопытства я попытался ввести набор данных с типом роли. U
вручную, но родительская роль всегда имеет приоритет, независимо от того, является ли она allow
или deny
правило.А без родительской роли вы вообще не получите доступа к админке.