2013-07-06 5 views
4

내 프로젝트에서 3 사용자를 만들려고 해요 :의 유형 사용자 SonataUserBundle + FOSUserBundle + SonataAdminBundle

  • Cliente : 누가 프런트 엔드에 액세스하고 필드 '이름', 'CPF'이있을 것이다, '주소'.
  • Vendedor : 사이트에 상품을 등록하고 필드 '전화'가 누가 'CNPJ'
  • 관리 : 모든 Clientes, Vendedores, 상품을 관리 할, 등등 ...

그래서 .. 3 묶음을 설치했습니다 : SonataUserBundle + FosUserBundle + SonataAdminBundle 각 튜토리얼을 따랐습니다. 그러나 나는이 사용자의 각 유형을 어떻게 만들 수 있는지 모른다.

엔티티 User 및 Group을 생성하는 ApplicationSonataUserBundle을 사용하고 있습니다.

namespace Sete\UserBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Application\Sonata\UserBundle\Entity\User as BaseUser; 

/** 
* Cliente 
* 
* @ORM\Table(name="cliente") 
* @ORM\Entity 
* 
*/ 
class Cliente extends BaseUser 
{ 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    ...another fields... 
} 

및 Vendedor :

namespace Sete\UserBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 
use Application\Sonata\UserBundle\Entity\User as BaseUser; 

/** 
* Vendedor 
* 
* @ORM\Table(name="vendedor") 
* @ORM\Entity 
*/ 
class Vendedor extends BaseUser 
{ 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    ...another fields... 
} 

AppKernel.php

 ... 
     new Sonata\UserBundle\SonataUserBundle('FOSUserBundle'), 
     new Sonata\EasyExtendsBundle\SonataEasyExtendsBundle(), 
     new Application\Sonata\UserBundle\ApplicationSonataUserBundle() 

그리고 config.yml

... 
fos_user: 
    db_driver:  orm # can be orm or odm 
    firewall_name: main 
    user_class:  Application\Sonata\UserBundle\Entity\User 
    group: 
     group_class: Application\Sonata\UserBundle\Entity\Group 

sonata_user: 
manager_type: orm # can be orm or mongodb 
... 
다음

내 코드입니다

이렇게하면 내 엔티티 Cliente와 Vendor는 그룹과 관련이 없습니다. 나는 $ 그룹 관계를 추가하려고하지만 일하지 않습니다. 따라서이 엔터티를 관리하려고 할 때 오류가 발생했습니다.

An exception occurred while executing 'SELECT count(DISTINCT c0_.id) AS sclr0 FROM cliente c0_ LEFT JOIN fos_user_user_group f3_ ON f2_.id = f3_.user_id LEFT JOIN fos_user_group f1_ ON f1_.id = f3_.group_id':

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'f2_.id' in 'on clause'

사용자 유형을 만드는 데 가장 좋은 방법이 있습니까? 또는 ApplicationUserBundle : User를 확장하는 대신 Cliente 및 Vendor 엔티티 (ApplicationUserBundle : User는 확장하지 않음)를 만든 다음 User와 관계를 만듭니다 ($ cliente 및 $ vendedor 필드를 User 엔티티에두고 관계를 설정).

죄송합니다. 일주일 내내이 일을하려고합니다. 많은 자습서를 따르지만 답은 없습니다.

Thx 모두.

답변

1

여러 사용자 유형을 사용하는 방법 중 하나는 Doctrine inheritance mapping을 사용하는 것입니다.

그러나 역할 보안 처리기와 함께 단일 사용자 유형을 사용하는 것이 좋습니다. Easy Extends (installation instructions)를 사용하여 SonataUserBundle을 설치해야 SonataUserBundle을 수정하지 않고 그대로 둘 수 있습니다. 필요한 모든 필드를 App \ UserBundle \ Entity \ User에 추가하고 세 개의 사용자 그룹 인 Clientes, Vendors 및 Admins를 만들어야합니다. 주 config.yml에서이 개 누락 된 역할을 추가 (이미 ROLE_ADMIN이) :

ROLE_SUPER_ADMIN:  [<...>, ROLE_CLIENT, ROLE_VENDOR] 

그 세 개의 사용자 그룹을 만든 적절한 권한을 할당합니다.

이제 User에서 custom fieds를 null로 설정하고 UserAdmin에서 fieds 사용자 유형 만 표시하면 보안 작업을 볼 수 있습니다.보기 :

if ($this->isGranted('ROLE_CLIENT')) { 
    $formMapper->add('cpf'); 
} 
+0

고맙습니다! 그것은 작동합니다. 역할에 관해서, 사용자 그룹을 설정할 때, DataBase를 업데이트하지 않습니다 (필드 역할이 null 임). 그것이 예상되는 행동입니까? – Munir

+1

환영합니다 (그룹을 사용하고 싶지 않거나 사용할 수없는 경우이 필드는 개별 사용자 권한을 설정하기위한 것으로 사용자의 역할 필드는 비워 두어야합니다.) – TautrimasPajarskas

+0

흠. – Munir