Magento: контроллеры Adminhtml во внешнем интерфейсе?

Я пытаюсь написать модуль, который позволяет пользователям создавать свои собственные магазины в нашей системе (функция multi-store).

Мне интересно, возможно ли выполнять функции контроллера adminhtml в интерфейсе Magento?

В данный момент я просто создаю папку и редактирую index.php, .htaccess при нажатии сохранить сайт в бэкенде Magento. Мне нужно больше, пожалуйста, помогите.

Любая помощь будет оценена. Спасибо!

1

Решение

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

Но ответить на вопрос: это возможно. Вам нужно будет создать собственный контроллер внешнего интерфейса, который имитирует вошедшего в систему пользователя-администратора, а затем переходит к действию контроллера adminhtml.

Пример (не проверено):

public function saveStoreAction()
{
$adminUser = Mage::getModel('admin/user')->load(ADMIN_USER_ID);
$adminSession = Mage::getSingleton('admin/session');
$adminSession->setUser($adminUser);
$adminSession->setIsFirstPageAfterLogin(false);

$this->_forward('save', 'store', 'adminhtml');
}

ADMIN_USER_ID будучи идентификатором внутреннего пользователя, под которым вы хотите выполнить действие. Это должна быть не ваша собственная учетная запись администратора с полными привилегиями, а фиктивная учетная запись, имеющая только необходимые разрешения, или реальная учетная запись, индивидуальная для каждого пользователя.

О _forward ():

Метод определен в Mage_Core_Controller_Varien_Action и задокументировано так:

/**
* Throw control to different action (control and module if was specified).
*
* @param string $action
* @param string|null $controller
* @param string|null $module
* @param array|null $params
*/

Он манипулирует текущим объектом запроса и устанавливает его как «не отправленный», чтобы фронт-контроллер снова попытался найти подходящий контроллер действия для его отправки, на этот раз в соответствии с новыми параметрами.

На самом деле в моей первой версии была ошибка, _forward не использует такой маршрут, как 'adminhtml/store/save' в качестве параметра, но отдельные части в обратном порядке, 'save', 'store', 'adminhtml',

2

Другие решения

Других решений пока нет …