私の最初の大規模な Symfony2 プロジェクトに取り組んでいますが、イベント リスナー/サブスクライバーで何が起こっているのかを把握するのに少し苦労しています。
ユーザーがアカウントを登録した後、ロール (BLOG_USER) を FOSUser エンティティに追加するイベント サブスクライバーが必要です。
ここに私がこれまでに持っているものがあります:
登録リスナー:
namespace MyBlog\SiteBundle\EventListener;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FormEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class RegistrationListener implements EventSubscriberInterface {
public static function getSubscribedEvents() {
return array(
FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess',
);
}
public function onRegistrationSuccess(FormEvent $event){
$rolesArr = array('ROLE_USER', 'BLOG_USER');
$user = $event->getForm()->getData();
$user->setRoles($rolesArr);
}
}
services.yml:
services:
myblog_user.registration_listener:
class: MyBlog\SiteBundle\EventListener\RegistrationListener
arguments: []
tags:
- { name: kernel.event_subscriber }
security.yml:
access_control:
- { path: ^/blog/, role: BLOG_USER }
これまでのところ、新しいユーザーを登録すると、/blog ルート (CRUD 画面のセット) にアクセスできません。BLOG_USER ロールのないユーザーに期待される「アクセス拒否」メッセージが表示されます。
編集:
私のコードは、データベース内のユーザーにロールを追加するように見えます。ロールの下の fos_user テーブルで、私のユーザーはこれを持っています:
a:1:{i:0;s:9:"BLOG_USER";}
私の access_control はこれを認識していないようです。
{% if is_granted('BLOG_USER') %}
is_granted も失敗します-ユーザーが持っている役割を確認できません...