2014-11-24 83 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