2013-11-04 54 views
2

真的,我已经定义了一个访问控制列表的选项卡管理客户Magento的自定义ACL返回默认

<acl> 
     <resources> 
      <all> 
       <title>Allow Everything</title> 
      </all> 
      <admin> 
       <children> 
        <customer> 
         <children> 
          <manage> 
           <children> 
            <managepoint translate="title"> 
             <title>Manage Point</title> 
             <sort_order>100</sort_order> 
            </managepoint> 
           </children> 
          </manage> 
         </children> 
        </customer> 
       </children> 
      </admin> 
     </resources> 
    </acl> 

使用此代码

public function canShowTab(){ 
    if(!Mage::getSingleton('admin/session')->isAllowed('customer/manage/managepoint')) 
     return false; 
    return true; 
} 

据expacted,默认情况下任何用户下的所有用户角色除了管理角色Mage :: getSingleton('admin/session') - > isAllowed('customer/manage/managepoint')应该返回FALSE,但实际上它返回TRUE,但是如果我检查然后取消选中此ACL作为一个特定角色,那么ACL按预期开始工作。

有人可以告诉我为什么Mage :: getSingleton('admin/session') - > isAllowed('customer/manage/managepoint')默认返回FALSE。

+0

创建acl后,我负责清理var/cache,var /会话和日志记录的IN/OUT。 我的core_session表也是空的 –

+0

而测试我发现Mage :: getSingleton('admin/session') - > isAllowed('customer/manage/garbage_value')返回FALSE,无论我定义的ACL如何返回TRUE –

回答

4

花了一些时间,但经过适当的测试后,我得出了有关ACL的Magento行为的结论。

Mangento将角色资源存储在具有权限deny/allow的admin_role表中。因此,无论何时我们创建新角色,都不会为该资源输入admin_role中的任何角色,并且isAllowed将默认返回TRUE值。但此后如果我们创建新的角色,并且取消选中自定义ACL,则admin_role会以“拒绝”权限保存条目。所以,允许将按照扩展进行工作。 因此,创建一个新的ACL后,我们必须去每个角色,并保存这些角色一次或去admin_role表,并提供所有role_id的条目

+0

我已经发现这是一些特别恼人的行为。 isAllowed的默认值为true,但查看该角色的资源选项卡时,该复选框将被取消勾选。 –

+0

@Cags正如答案中所解释的那样,您必须保存一次角色,因为它有一次可以使新的acl正常工作。 –

+0

确实,我觉得这个特别讨厌。刚刚在magento.stackexchange.com上提出了一个问题,看看有没有人有过这个过程自动化的经验。 –

相关问题