2016-10-05 78 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接口您的用戶實體執行包含方法名getRoles應返回任一種陣列字符串的較Symfony\Component\Security\Core\Role\RoleInterface用戶角色或與陣列。因此,您可以在名爲Role的項目中創建一個實體,該實體實施Symfony\Component\Security\Core\Role\RoleInterface。然後將該實體鏈接到您的用戶實體,然後拋出一個關聯許可關聯ManyToMany。最後實現應該返回給定用戶的角色的getRoles方法。

然後,您可以像項目中的任何其他實體一樣管理您的角色。

1

RoleInterface現在已經過時,是由於用於去除4.0,所以你可以做同樣的Genoud馬格洛伊爾說,但一定要延長Symfony\Component\Security\Core\Role\Role

這裏是我的角色實體的例子。

<?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); 
    } 
相關問題