2

我在管理客户中为选项卡定义了一个 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;
}

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

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

4

2 回答 2

6

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

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

于 2013-11-04T13:48:12.180 回答
0

这本身并不是一个解决方案,而且我发现这特别烦人。
因此,如果您有许多角色并且想要快速添加拒绝,那么这是一种方法,您可以运行此 SQL 命令

-- Add roles to DENY
INSERT INTO admin_rule
SELECT null, role_id, 'admin/path/to/your/acl', null, 0, 'G', 'deny'  FROM admin_role WHERE user_id = 0 AND role_id NOT IN (1, 20);

-- Add roles to ALLOW
INSERT INTO admin_rule
SELECT null, role_id, 'admin/path/to/your/acl', null, 0, 'G', 'allow'  FROM admin_role WHERE user_id = 0 AND role_id IN (1, 20);

此脚本可以与您的代码同时发送。

于 2019-02-25T12:54:33.567 回答