1

私はこのシナリオを持っています:

  • Userに属しますGroups
  • Groups特定のRoles

これをGroup.phpで宣言する必要があるかどうかを知りたい

これはGroup.phpで、これはRole.phpです。

$this->roles = new \Doctrine\Common\Collections\ArrayCollection();

また

$this->roles = new array();

それがsymfonyのセキュリティでどのように機能するのか混乱しています。つまり、symfony のセキュリティが arraycollection または array でロールを要求する形式を意味します。

4

2 に答える 2

3

symfony 2は、メソッドの戻り値としてとarrayを期待します。には多くのことができ、各グループには多くのことがあるので、私は次のようにします。RolegetRoles()UserGroupRole

/**
 * @ORM\Entity
 * @ORM\Table(name="user")
 */
class User
{
    /* @ORM\ManyToMany(targetEntity="Group", inversedBy="users") */
    private $groups;

    public function __construct()
    {
        $this->groups = new \Doctrine\Common\Collections\ArrayCollection();
    }

    public function getRoles()
    {
        $roles = array();

        foreach($this->groups as $group) :
            $roles = array_merge($roles, $group->getRoles()->toArray());
        endforeach;

        return $roles;
    }
}
于 2012-07-19T09:23:55.420 に答える
1

それで、あなたの質問はArrayまたはArrayCollectionですか?

ORMのコンテキストでより良い仕事をし、拡張/操作がはるかに簡単であるため、ArrayCollectionを使用してください( Doctrine Collectionsを参照してください)。

Doctrine でコレクションを設定する方法の詳細について は、ドキュメントのコレクションの初期化を参照してください。


FOSUserBundle

また、優れたFriends of Symfony (FOS)UserBundle の使用を検討することもできます。これは と を完全にサポートしGroupsていRolesます。

アクセス制御リスト (ACL)

ACL を確認することもできます。

複雑なアプリケーションでは、アクセスの決定は、アクセスを要求している人物 (トークン) に基づくだけでなく、アクセスが要求されているドメイン オブジェクトも関与するという問題に直面することがよくあります。これが ACL システムの出番です。

Symfony2 - アクセス制御リスト

于 2012-07-19T08:56:21.297 に答える