2017-10-23 10 views
0

私はFOSバンドルユーザの可能性を模索しています。FOSバンドルユーザ - 複数のロール

Knpuniversity(https://knpuniversity.com/screencast/fosuserbundle/roles-canonical-fields)のおかげで、この優れたバンドルがユーザーを管理するのに役立ちました。

私の場合も複数のロールが必要ですBUUUUUUT私は、ユーザーテーブルのフィールドにロールの配列で保存したくありません。私の意図は、1人のユーザが 'n'ロールを持ち、1人のロールが 'n'ユーザによっても使用できる、 'n'から 'm'までの関係を持つテーブルをさらに使用することです。

ユーザーとロールを管理する1つのテーブルを持つ代わりに、ユーザー用に1つのテーブルが必要です。ロール用のテーブルと最後のテーブルは、それらの間にn-mを作成する必要があります。他の機能にこの構造を使用し、配列としての役割を保存するため、私はそれが必要です...私の場合は、解決するよりも多くの問題が生じます。

あなたはそれを達成するために何を提案しますか? 別のバンドルですか? おそらく、バンドルを自分の要件に適合させる簡単な解決策ですか?

私は何ができると思いますか?

ありがとうございます。

答えて

0

最後に、FOSUserBunldeの機能を使用して、役割とグループを使用して、各役割をコントローラとグループを実行する権限として使用し、ユーザーからのすべての役割を簡単に管理します。

0

ロール関連のメソッドをオーバーライドするFosUserManagerクラスを拡張する新しいUserManagerクラスを作成します。しかし、それが合理的かどうかは分かりません。また、FosUserBundle Userモデルから拡張された中間平野オブジェクトを作成し、それを使用してyor User Entityを作成する必要があります。この中間オブジェクトでは、ロールの格納方法を変更する必要があります。

真剣に私はこれが自分のユーザー管理を最初から始めるよりも良いとは思っていません。

+0

もし私があなたの言ったように私は自分のやり方でそれをやろうとします。要点は、この機能に取り組むことを避け、symfonyなどで将来のアップデートに共通のバンドルを使用する利点を活用することでした。 他の誰かがもっとアイデアを持っていれば...私が決定する前にもっと多くのオプションを聞きたい最終的に自分自身を認証するユーザの役割の機能の管理。等 –

0

これは私がやっていることですし、私のためにかなりうまく機能:

私は、ユーザー、役割、およびグループ企業

ユーザエンティティ

use FOS\UserBundle\Model\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 

     /** 
     * @ORM\Entity 
     * @ORM\Table(name="fos_user") 
     */ 
     class User extends BaseUser 
     { 
      /** 
      * @ORM\Id 
      * @ORM\Column(type="integer") 
      * @ORM\GeneratedValue(strategy="AUTO") 
      */ 
      protected $id; 

      public function __construct() 
      { 
       parent::__construct(); 
       // your own logic 
      } 
     } 

を持っていますグループエンティティ

use FOS\UserBundle\Model\Group as BaseGroup; 
use Doctrine\ORM\Mapping as ORM; 

     /** 
     * @ORM\Entity 
     * @ORM\Table(name="fos_group") 
     */ 
     class Group extends BaseGroup 
     { 
      /** 
      * @ORM\Id 
      * @ORM\Column(type="integer") 
      * @ORM\GeneratedValue(strategy="AUTO") 
      */ 
      protected $id; 
     } 

このすべては配列として提供されますが、symfonyはそれから延長するのSymfony \コンポーネント\セキュリティ\コア\役割\役割クラスを提供して今すぐ役割デフォルトでFOS docs

からです。

ので、あなたの役割のクラスでは、次のようになります。あなただけの次のようにマッピング情報を追加する必要が魔法を行うに

エンティティのロール

use Symfony\Component\Security\Core\Role\Role as BaseRol; 
use Doctrine\ORM\Mapping as ORM; 

     /** 
     * @ORM\Entity 
     * @ORM\Table(name="fos_role") 
     */ 
     class Role extends BaseRol 
     { 
      /** 
      * @ORM\Id 
      * @ORM\Column(type="integer") 
      * @ORM\GeneratedValue(strategy="AUTO") 
      */ 
      protected $id; 

      public function __construct() 
      { 
       parent::__construct(); 
       // your own logic 
      } 
     } 

グループおよびユーザエンティティその後

/** 
       * @ORM\ManyToMany(targetEntity="path/to/my/roleEntity") 
       * @ORM\JoinTable(name="join_table_name", 
       *  joinColumns={@ORM\JoinColumn(name="join_column_name_id", referencedColumnName="id")}, 
       *  inverseJoinColumns={@ORM\JoinColumn(name="join_column_name_id", referencedColumnName="id")} 
       *) 
       */ 
       protected $roles; 

の両方における役割は、あなたのデータベースを更新サポートするために、ユーザーエンティティ

/** 
      * @ORM\ManyToMany(targetEntity="path/to/my/groupEntity") 
      * @ORM\JoinTable(name="join_table_name", 
      *  joinColumns={@ORM\JoinColumn(name="join_column_name_id", referencedColumnName="id")}, 
      *  inverseJoinColumns={@ORM\JoinColumn(name="join_column_name_id", referencedColumnName="id")} 
      *) 
      */ 
      protected $groups; 

でグループをサポートするために、あなたは準備ができています行く。

関連する問題