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') %}
しかし、これを行う他の方法はありますか?