Как сделать расширение совместимым с конкретными списками управления доступом для просмотра в магазине
В Magento Enterprise есть модуль Enterprise_AdminGws
, который ограничивает права на редактирование определенными представлениями хранилища.
Как обычно это реализуется? т. Е. Если я создам расширение, которое реализует свою собственную модель данных с данными, хранящимися на уровне представления хранилища, означает ли это, что ограничения, налагаемые AdminGws
, будут работать из коробки или необходимо зарегистрировать мои дополнительные модели ресурсов с расширением Enterprise_AdminGws
.
И примером может быть расширение блога с записи в блоге и комментарии: Они имеют поле просмотра магазина и должны редактироваться только администратором просмотра магазина.
Редактировать (уточнение области действия): Ясно, что я должен определить свои собственные списки управления доступом в adminhtml.xml как обычно, сначала.
2 answers
Хотя весь код предоставляется для вас, если вы используете встроенные структуры Magento (клиент, отдел продаж и т.д.), вы должны предоставить свои собственные средства проверки обратного вызова для разрешений, специфичных для вашего приложения.
Например, этот наблюдатель:
<model_save_before>
<observers>
<enterprise_admingws>
<class>enterprise_admingws/observer</class>
<method>validateModelSaveBefore</method>
</enterprise_admingws>
</observers>
</model_save_before>
Позволяет методу Enterprise_AdminGws_Model_Observer::validateModelSaveBefore
сопоставляться с пользовательским методом обратного вызова, производным от имени класса. Этот метод определен в Models.php
, в котором есть некоторый код начальной загрузки, позволяющий определить, существуют ли привилегии сохранения для особая роль.
Обратный вызов либо throw
, либо вернет значение void. Его цель состоит только в проверке. Добавьте свои собственные обратные вызовы, расширив Enterprise_AdminGws_Model_Models
.
Я считаю, что вы также должны объявить acl в файле adminhtml.config (поскольку он указан в названии). Что-то вроде
<config>
<acl>
<resources>
<admin>
<children>
<system>
<children>
<config>
<children>
<moduleName>
<title>moduleName Section</title>
</moduleName>
</children>
</config>
</children>
</system>
<report>
<children>
<salesroot>
<children>
<moduleName_settlement_reports translate="title">
<title>Settlement Reports</title>
<children>
<view translate="title">
<title>View</title>
</view>
<fetch translate="title">
<title>Fetch</title>
</fetch>
</children>
</moduleName_settlement_reports>
</children>
</salesroot>
</children>
</report>
</children>
</admin>
</resources>
</acl>
</config>
- это то, что я использую, и, похоже, оно работает просто отлично.