расширение ACL magento


Мне было поручено расширить функциональность ACL Magento и разрешить одному пользователю выполнять более одной роли.

Я перепрыгивал с блога на блог и из файла в файл в течение последней недели - все, что я могу найти, говорит только о методе isAllowed() - это не имеет ничего общего с тем, что я ищу.

Почему? Если я зарегистрирую все вызовы в isAllowed() Я получаю разные результаты для администратора и пользователя - система уже знает, для каких ресурсов должно быть разрешено() называемый.

Я пытаюсь создать дополнительные таблицы, содержащие идентификатор пользователя и идентификатор роли ACL будет объединен для всех ваших ролей.

Я ищу место в коде, когда матрица ACL сжимается: Я сузил круг подозреваемых до:

/app/code/core/Mage/Admin/Model/Resource/Acl.php

loadAcl();
loadRoles();
loadRules() ( $acl->allow() and $acl->deny() )

Но я не смог найти никаких пользовательских запросов или методов Как система узнает, можете вы получить доступ к ресурсам или нет? Я смотрю в нужном месте?

Также: проверка файлы, в которых я нашел этот комментарий:

//@FIXME: stupid fix of previous multi-roles logic.

В /app/code/core/Mage/Adminhtml/controllers/Permissions/UserController.php Действие сохранения() приблизительно. Строка 142

Похоже, что эта функциональность была доступна в предыдущих версиях - есть ли какой-либо существующий код, который я мог бы использовать?

Заранее благодарю вас за любую информацию, которая может помочь мне продвинуться в этом направлении.

С наилучшими пожеланиями,

Author: Foxmark, 2014-10-27

1 answers

Сегодня я совершил прорыв.

На самом деле isAllowed() является единственным методом для переопределения. Причина, по которой я получал разное количество звонков для администратора и пользователя, заключалась в том, что в первый раз вызывается функция isAllowed(), чтобы найти первый доступный URL-адрес - вы можете получить доступ в app/code/core/Mage/Adminhtml/controllers/IndexController.php setIsFirstPageAfterЛогин()

На самом деле, если вы переопределите isAllowed() следующим образом:

public function isAllowed() {
    return true;
}

Вы получите доступ ко всем ресурсы.

Спасибо за ваш комментарий, Ричард!

 0
Author: Foxmark, 2014-10-28 17:36:23