3

FOS User Bundle を使用してアプリへのアクセスを管理しています。グループの概念が必要なので、doc groupで説明されているように、必要なものを実装しました。

ユーザーとグループの作成はすべて問題ありませんが、ユーザーでログインし、その役割を取得しようとすると、そのユーザーには USER_ROLE しかありません。

これが私のユーザーです

use FOS\UserBundle\Entity\User as BaseUser;
class RegistredUser extends BaseUser
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @ORM\ManyToOne(targetEntity="myBundle\Entity\RegistredUserGroup")
 */
protected $group;
 [...]
}

これが私のグループクラスです

use FOS\UserBundle\Entity\Group as BaseGroup;
class RegistredUserGroup extends BaseGroup
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

[...]
}

私のユーザーには、RegistredUser テーブルにロールが設定されていませんが、groupId が設定されています。このグループには ROLE_ADMIN ロールがあります。

私のレイアウトでは、次のように役割を確認しようとしています:

    {% if is_granted('ROLE_ADMIN') %}
    <dl class="menuIcon">
                    <dd><img src="{{ asset('bundles/bundle/images/user.png') }}" alt=""></dd>
                    <dd>{{ "menu.gererReferentiel"|trans }}</dd>
                    </dl>
    {% endif %}

しかし、Symfony は何も表示しません。

グループの役割をチェックするために悪い機能を使用していますか? それとも私は何か間違ったことをしていますか?

解決策は groups_role を取得しています

{% if app.user != null and  app.user.group.hasRole('ROLE_ADMIN') %}

しかし、これを行う他の方法はありますか?

4

1 に答える 1

1

FOSUserBundle を使用すると、グループをユーザーに関連付けることができます。グループは、ロールのコレクションをグループ化する方法です。グループの役割は、それに属するすべてのユーザーに付与されます。

FOSUserBundle でグループを使用することから

あなたの場合、チェックしないでください

app.user.group.hasRole('ROLE_ADMIN')

ユーザーが管理者ロールを持つグループを持っている場合、現在のユーザーが特定のグループのメンバーであるかどうかを確認します。

app.user.hasGroup('ADMIN')
于 2013-07-11T06:10:42.307 に答える