【问题标题】:Magento Custom Module Admin PermissionsMagento 自定义模块管理员权限
【发布时间】:2010-07-07 16:14:49
【问题描述】:

我为 Magento 创建了一些自定义模块,当我尝试为模块分配权限时(选中复选框),当我点击保存时取消选中该框。

有人有什么想法吗?听起来好像我的 config.xml 文件中有一些东西,所以我会在这里发布以防万一:

<config>
<modules>
    <Wpe_Vendorlist>
        <version>0.1.0</version>
    </Wpe_Vendorlist>
</modules>
<admin>
    <routers>
        <vendorlist>
            <use>admin</use>
            <args>
                <module>Wpe_Vendorlist</module>
                <frontName>vendorlist</frontName>
            </args>
        </vendorlist>
    </routers>
</admin>
<adminhtml>
    <menu>
        <customer>
            <children>
                <items module="vendorlist">
                    <title>SO Vendor List</title>
                    <sort_order>999</sort_order>
                    <action>vendorlist/adminhtml_vendorlist</action>
                </items>
            </children>
        </customer>
    </menu>
    <acl>
        <resources>
            <all>
                <title>Allow Everything</title>
            </all>
            <admin>
                <children>
                    <Wpe_Vendorlist>
                        <title>Vendorlist Module</title>
                        <sort_order>10</sort_order>
                    </Wpe_Vendorlist>
                </children>
            </admin>
        </resources>
    </acl>
    <layout>
        <updates>
            <vendorlist>
                <file>vendorlist.xml</file>
            </vendorlist>
        </updates>
    </layout>
</adminhtml>
<global>
    <models>
        <vendorlist>
            <class>Wpe_Vendorlist_Model</class>
            <resourceModel>vendorlist_mysql4</resourceModel>
        </vendorlist>
        <vendorlist_mysql4>
            <class>Wpe_Vendorlist_Model_Mysql4</class>
            <entities>
                <vendorlist>
                    <table>vendorlist</table>
                </vendorlist>
            </entities>
        </vendorlist_mysql4>
    </models>
    <resources>
        <vendorlist_setup>
            <setup>
                <module>Wpe_Vendorlist</module>
            </setup>
            <connection>
                <use>core_setup</use>
            </connection>
        </vendorlist_setup>
        <vendorlist_write>
            <connection>
                <use>core_write</use>
            </connection>
        </vendorlist_write>
        <vendorlist_read>
            <connection>
                <use>core_read</use>
            </connection>
        </vendorlist_read>
    </resources>
    <blocks>
        <vendorlist>
            <class>Wpe_Vendorlist_Block</class>
        </vendorlist>
    </blocks>
    <helpers>
        <vendorlist>
            <class>Wpe_Vendorlist_Helper</class>
        </vendorlist>
    </helpers>
</global>
</config>

【问题讨论】:

    标签: magento


    【解决方案1】:

    我强烈建议您查看Alan Storm's article 的系统配置以及他的其他系列,这是我找到的有关 magento 编程的最佳信息。

    对于这个特定的问题,这是我在模块中使用您的模块名称的方法:

    <acl><!-- permits -->
        <resources>
            <admin>
                <children>
                    <customer translate="title" module="vendorlist"><!-- this tag matches the menu tag, and the same for his children -->
                        <title>what will appears in the checkboxes tree when you create a role</title>
                        <children>
                            <firstchild>
                                <title>what will appears in the checkboxes tree when you create a role</title>
                            </firstchild>
                        </children>
                    </customer>
                </children>
            </admin>
        </resources>
    </acl>
    

    你不需要:

                    <children>
                        <firstchild>
                            <title>what will appears in the checkboxes tree when you create a role</title>
                        </firstchild>
                    </children>
    

    由于您的模块中没有孩子,看来,我只是将其作为示例。
    我希望这会有所帮助

    【讨论】:

      【解决方案2】:

      请更改您的 config.xml 并替换

      <acl>
          <resources>
              <all>
                  <title>Allow Everything</title>
              </all>
              <admin>
                  <children>
                      <Wpe_Vendorlist>
                          <title>Vendorlist Module</title>
                          <sort_order>10</sort_order>
                      </Wpe_Vendorlist>
                  </children>
              </admin>
          </resources>
      </acl>
      

      <acl>
          <resources>
              <all>
                  <title>Allow Everything</title>
              </all>
              <admin>
                  <children>
                      <vendorlist>
                          <title>Vendorlist Module</title>
                          <sort_order>10</sort_order>
                      </vendorlist>
                  </children>
              </admin>
          </resources>
      </acl>
      

      只需要在children标签之后改变vendorlist而不是Wpe_Vendorlist。此更改在我的自定义模块中对我有用,希望对其他人也有帮助。

      【讨论】:

      • moduleCreator 使用错误的 acl 标记语法创建模块配置文件。这就是问题所在。
      【解决方案3】:

      您应该在资源和菜单项名称中只使用小写字符。请参阅 app/code/core/Mage/Adminhtml/Block/Permissions/Tab/Rolesedit.php

      上的构造函数
      public function __construct()
      {
          ...
      
          foreach ($rules_set->getItems() as $item) {
              $itemResourceId = $item->getResource_id();
              if (array_key_exists(strtolower($itemResourceId), $resources) && $item->getPermission() == 'allow') {
                  $resources[$itemResourceId]['checked'] = true;
                  array_push($selrids, $itemResourceId);
              }
          }
      
          ....
      

      我还建议您考虑将 acl 和菜单信息移至 adminhtml.xml,而不是将其放在 config.xml 中。

      另一个问题是您应该在菜单树和 acl 树中具有完全相同的结构,因此您的 acl 反映了菜单结构,并且当授予角色权限时,magento 知道要启用什么。 Ivan Chepurnyi 有一篇很棒的文章关于这个here

      因此,在更改之后,您最终会在 adminhtml.xml 上得到与此类似的内容:

      <adminhtml>
          <menu>
              <customer>
                  <children>
                      <wpe_vendorlist module="vendorlist">
                          <title>SO Vendor List</title>
                          <sort_order>999</sort_order>
                          <action>vendorlist/adminhtml_vendorlist</action>
                      </wpe_vendorlist>
                  </children>
              </customer>
          </menu>
          <acl>
              <resources>
                  <all>
                      <title>Allow Everything</title>
                  </all>
                  <admin>
                      <children>
                          <customer>
                              <children>
                                  <wpe_vendorlist>
                                      <title>Vendorlist Module</title>
                                      <sort_order>10</sort_order>
                                  </wpe_vendorlist>
                              </children>
                          </customer>
                      </children>
                  </admin>
              </resources>
          </acl>
      </adminhtml>
      

      【讨论】:

        【解决方案4】:

        我从 magento 论坛找到了一些东西。转到以下链接: http://www.magentocommerce.com/boards/viewthread/78673/

        但仍无法从新创建的角色设置这些自定义模块的权限。 这些自定义模块没有出现在新创建角色的用户的主菜单中。

        【讨论】:

          【解决方案5】:

          更改acl标签中的语法后模块显示在自定义模块权限中

          【讨论】:

            猜你喜欢
            • 2018-08-13
            • 1970-01-01
            • 2017-08-21
            • 1970-01-01
            • 2013-12-21
            • 1970-01-01
            • 2013-06-26
            • 2013-05-06
            • 1970-01-01
            相关资源
            最近更新 更多