解释Symfony的ACL模式

时间:2014-11-24 18:48:57

标签: mysql symfony doctrine acl

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

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 个答案:

答案 0 :(得分:2)

只有一列包含实际权限,即mask。此列包含bitmask,称为&#34;权限掩码&#34;,存储为整数,表示ACE中的cumulative permissions

如果授予了权限,其他列可能会影响:

ace_order用于确定首先检查哪个ACE。如果ACE适用,它将用于授予(或拒绝)许可。如果没有,则检查下一个ACE。

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

granting是一个布尔值(存储为整数),用于指定ACE中的权限是被授予还是被拒绝

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