2012-03-19 3 views
1

ACLについての詳細は不足しています。これは、ドメインオブジェクトを永続化した後にcreateAclを呼び出すのと同じくらい簡単です。次に、ユーザ/オブジェクトにinsertObjectAceというマスクを付けます。Symfony2はどのようにACLを内部的に管理していますか?

しかし、内部的にSymfony2がACLを管理していますか?余分な列がテーブルに追加されていますか?

$entityManager = $this->get('doctrine.orm.default_entity_manager'); 
$entityManager->persist($comment); 
$entityManager->flush(); 

// creating the ACL 
$aclProvider = $this->get('security.acl.provider'); 
$objectIdentity = ObjectIdentity::fromDomainObject($comment); 
$acl = $aclProvider->createAcl($objectIdentity); 

// retrieving the security identity of the currently logged-in user 
$securityContext = $this->get('security.context'); 
$user = $securityContext->getToken()->getUser(); 
$securityIdentity = UserSecurityIdentity::fromAccount($user); 

// grant owner access 
$acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_OWNER); 
$aclProvider->updateAcl($acl); 

答えて

2

それは

テーブルは、典型的な アプリケーションのほとんどの行に少なくとも行から注文され、新しいテーブルの束を作成します。

  • acl_security_identities:この表は、すべてのセキュリティIDを記録(SID)がACEを保持します。 RoleSecurityIdentityとUserSecurityIdentity
  • のacl_classes:このテーブルは、クラス名を他のテーブルから参照できる一意のIDにマップします。
  • acl_object_identities:この表の各行は、単一のドメインオブジェクトインスタンスを表します。
  • acl_object_identity_ancestors:このテーブルを使用すると、ACLのすべての祖先を非常に効率的に判別できます。
  • acl_entries:このテーブルにはすべてのACEが含まれています。これは、通常、最も多くの行を持つ表です。パフォーマンスに大きな影響を与えることなく何千万ものものを含めることができます。

    http://symfony.com/doc/current/cookbook/security/acl_advanced.html

は、実際にこの章では、あなたにACLがSymfony2の内部で管理されているかについて多くのことを説明します

関連する問題