0

getUser()of security.contextservice によって呼び出されたオブジェクトが実際に私のカスタム ユーザー クラスのオブジェクトであることをコントローラーでチェックインするのは良い考えですか?

public function editAction()
{
    $user = $this->container->get('security.context')->getToken()->getUser();
    if (!is_object($user) || !$user instanceof \Acme\UserBundle\User) {
        throw new AccessDeniedException('This user doesn't have access');
    }

    // work with $user
    // ....

保証されている唯一のことはgetUser()、 を実装したオブジェクトを返すことだけSymfony\Component\Security\Core\User\UserInterfaceです。

これは、コントローラーが潜在的に任意のタイプのオブジェクトを受け取る可能性があることを意味します (おそらく匿名のトークン)。そのため、オブジェクトをビューに (制御せずに) 直接渡し、その後 を呼び出します。これは、クラス .. で{{ user.biography }}のみ実装されます。Acme\UserBundle\Userエラーを起こしていますか?

4

2 に答える 2

2

あなたの構成がその可能性を許すなら、それは良い考えです。これは、匿名ユーザーを許可するか、複数のタイプを実装している場合に発生する可能性があります。

複数のユーザー タイプを実装する場合、共通のインターフェイスを共有することをお勧めします。また、各クラスの「getRole」メソッドをオーバーライドして、各タイプがそのタイプを定義する追加のロールを返すようにし、アクセス制御を使用して不要なタイプを除外することもできます。

于 2013-03-20T09:59:54.960 に答える
0

このタイプの条件を使用することをお勧めします。

public function editAction()
{
    if (!$this->get('security.context')->isGranted('ROLE_USER')) {
        return  $this->redirect($this->generateUrl('frontend_cart_login'));
    }
...

security.yml ファイルで定義された独自の「ROLE」を選択できます。

于 2013-03-20T09:21:45.063 に答える