Magento自定义ACL默认返回TRUE

Dee*_*ngh 2 php acl magento magento-1.7

我已经在“管理客户”中为标签定义了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>
Run Code Online (Sandbox Code Playgroud)

使用此代码

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

据推测,默认情况下,除管理员角色Mage :: getSingleton('admin / session')-> isAllowed('customer / manage / managepoint')以外的所有用户角色下的所有用户均应返回FALSE,但实际上返回TRUE,但是如果我选中然后取消选中此ACL的垂直角色,然后ACL开始按预期工作。

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

Dee*_*ngh 5

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

Mangento将角色资源存储在admin_role表中,权限为拒绝/允许。因此,每当我们创建新角色时,admin_role中的任何角色都没有该资源的条目,并且isAllowed默认情况下将返回TRUE值。但是此后,如果我们创建新角色并且未选中我们的自定义ACL,则admin_role将保存具有“拒绝”权限的条目。因此isAllowed将按预期方式工作。因此,在创建新的ACL之后,我们要么转到每个角色并保存一次这些角色,要么转到admin_role表并为所有role_id提供条目