2014-11-24 43 views
0

我正在将系统从symfony2迁移到节点。大部分情况都很好,但我在理解ACL的工作原理时遇到了一些麻烦。 我现在有一个想法,但看看mysql架构,我看到我有2列与实际权限,ace_order面具。有人可以告诉我为什么有2个字段,而不是只有一个和/或如何解释它们,所以我可以翻译成一个更简单的模式。解释Symfony的ACL模式

CREATE TABLE `acl_entries` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `class_id` int(10) unsigned NOT NULL, 
    `object_identity_id` int(10) unsigned DEFAULT NULL, 
    `security_identity_id` int(10) unsigned NOT NULL, 
    `field_name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `ace_order` smallint(5) unsigned NOT NULL, <== first col 
    `mask` int(11) NOT NULL, <== second col 
    `granting` tinyint(1) NOT NULL, 
    `granting_strategy` varchar(30) COLLATE utf8_unicode_ci NOT NULL, 
    `audit_success` tinyint(1) NOT NULL, 
    `audit_failure` tinyint(1) NOT NULL, 
    PRIMARY KEY (`id`), 
    ... other key stuff ... 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=COMPACT; 

编辑:
我如何ace_order影响权限最感兴趣。

+1

首先:我不知道。 但也许你在这里找到你的答案:https://github.com/symfony/security-acl/blob/master/Domain/PermissionGrantingStrategy.php#L137 我会打开你的项目文件(供应商文件夹中的某个地方)并通过逻辑步骤... – 2014-11-28 08:18:29

回答

2

只有一列包含实际权限,即mask。该列包含一个bitmask,它被称为“权限掩码”,它被存储为一个整数,表示ACE中的cumulative permissions

其他栏目可以影响如果权限授予:

ace_order用于确定ACE首先检查。如果ACE适用,它将用于授予(或拒绝)权限。如果不是,则检查下一个ACE。

订单由添加ACE的顺序决定:添加的最后一个ACE将订购0,第一个将具有最高数量。作为一般规则,您应该从最不具体的到最具体的ACE,这意味着最具体的将首先被检查。

granting是布尔(存储为整数)指定如果在ACE的权限授予拒绝

granting_strategy指定您要求的权限与ACE中的权限进行比较。换句话说:如果ACE适用。您可以在source of PermissionGrantingStrategy中找到解释。

+0

我几乎在那里......你知道ace_order数字是如何确定的吗? – Manatax 2014-12-02 20:21:52

+0

我已更新我的答案以解释订购。 – 2014-12-03 08:40:48

+0

所以,最高的ace_order将是最具体的。对? – Manatax 2014-12-04 18:42:50