2016-10-05 4 views
2

こんにちは、皆さんはsymfonyのユーザとユーザの役割とその動作についての論理を理解しようとしています。 symfonyの中に新しいと私は、このチュートリアルに従う: http://symfony.com/doc/current/security/entity_provider.htmlsymfonyがどのようにユーザロールを格納するのか

すべては私のプロジェクトで完璧に動作しますが、私は、データベースに見たとき、私はuserテーブルと私はテーブル内のデータのようにregistred何すべてのユーザーを持っています。

ただし、ユーザーの役割の表はどこですか? symfonyは誰がROLE_ADMINで、誰がROLE_MODERATORであるかを知っています。どのようにすべてのユーザーに実装することができます特定の役割と私はいくつかの管理パネルから後でそれを変更することができますデータベースの役割を保存? ACL meybe?

+2

デフォルトでは、ロールはユーザーテーブルの列として格納されます。実際にはシリアル化された配列なので、複数の役割を持つことができます。もちろん、独自の実装を行い、必要があると感じる場合はユーザーロールテーブルを持つことができます。 – Cerad

+0

[このリンク](http://stackoverflow.com/questions/39198846/symfony3-how-to-store-user-roles-in-database)も役立つかもしれません – mapmalith

答えて

5

symfonyはあなたの役割を保存することはできません。たとえば、管理コンソールをスローする必要がある場合は、それらを保管する必要があります。

Symfony\Component\Security\Core\User\UserInterfaceは、ユーザーのエンティティが実装するインタフェースユーザの役割やSymfony\Component\Security\Core\Role\RoleInterfaceのと配列を表すStringの配列のいずれかを返さなければならないメソッド名getRolesが含まれています。したがって、Roleという名前のプロジェクト内にSymfony\Component\Security\Core\Role\RoleInterfaceというエンティティを作成することができます。次に、そのエンティティをあなたのUserエンティティにリンクして、ManyToManyの関連付けをスローします。最後に、指定されたユーザーのロールを返すgetRolesメソッドを実装します。

これで、プロジェクトの他のエンティティとしてロールを管理できます。

1

RoleInterfaceは、今あなたがGenoudマグロアールが言ったように同じことを行うが、にここSymfony\Component\Security\Core\Role\Role

を拡張することを確認することができ、非推奨と4.0での除去のための原因であるされていますが私の役割実体の一例です。

<?php 

namespace ExampleCoreBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Security\Core\Role\Role; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* ExampleRole 
* 
* @ORM\Table(name="EXAMPLE_ROLE") 
* @ORM\Entity 
*/ 
class ExampleRole extends Role 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="ID", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="SEQUENCE") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @Assert\NotBlank() 
    * @Assert\Length(
    *  min = 9, 
    *  max = 100, 
    *  minMessage = "Role name must be at least {{ limit }} characters long", 
    *  maxMessage = "Role name cannot be longer than {{ limit }} characters" 
    *) 
    * @ORM\Column(name="ROLE_NAME", type="string", length=255, nullable=false, unique=true) 
    * 
    */ 
    private $roleName; 

    /** 
    * @var string 
    * 
    * @Assert\NotBlank() 
    * @Assert\Choice({"Y","N"}) 
    * 
    * @ORM\Column(name="GRANTABLE", type="string", length=1, nullable=false) 
    */ 
    private $grantable; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="CREATED_ON", type="datetime", nullable=false) 
    */ 
    private $createdOn; 

    //...and so on with whatever else you want to save. 

    public function __construct($roleName = null) 
    { 
     parent::__construct($roleName); 
    } 
関連する問題