расширение 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
Похоже, что эта функциональность была доступна в предыдущих версиях - есть ли какой-либо существующий код, который я мог бы использовать?
Заранее благодарю вас за любую информацию, которая может помочь мне продвинуться в этом направлении.
С наилучшими пожеланиями,
1 answers
Сегодня я совершил прорыв.
На самом деле isAllowed() является единственным методом для переопределения. Причина, по которой я получал разное количество звонков для администратора и пользователя, заключалась в том, что в первый раз вызывается функция isAllowed(), чтобы найти первый доступный URL-адрес - вы можете получить доступ в app/code/core/Mage/Adminhtml/controllers/IndexController.php setIsFirstPageAfterЛогин()
На самом деле, если вы переопределите isAllowed() следующим образом:
public function isAllowed() {
return true;
}
Вы получите доступ ко всем ресурсы.
Спасибо за ваш комментарий, Ричард!