Вопрос

в 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 правило.А без родительской роли вы вообще не получите доступа к админке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top