我正在将系统从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 如何影响权限。
答案 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中找到解释。