2016-10-05 6 views
2

Привет, ребята, я пытаюсь понять логику в symfony о роли пользователя и пользователя и о том, как она работает. Я новичок в Symfony и я это руководство: http://symfony.com/doc/current/security/entity_provider.htmlГде и как пользовательские роли Symfony

Все отработан в моем проекте, но когда я смотрю в базе данных у меня есть user стола и все, что я пользователь зарегестрирована как данные в таблице.

Но где таблица для пользовательских ролей? Как 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, который должен возвращать либо массив String, представляющую роль пользователя или и массив Symfony\Component\Security\Core\Role\RoleInterface. Таким образом, вы можете создать объект в своем проекте с именем Role, который реализует Symfony\Component\Security\Core\Role\RoleInterface. Затем свяжите эту сущность с вашим объектом пользователя, добавив ассоциацию ManyToMany: . Наконец реализует метод getRoles, который должен возвращать роли данного пользователя.

Затем вы можете управлять своими ролями, как и любой другой объект в своем проекте.

1

RoleInterface теперь устарела и подлежит удалению в 4.0, так что вы можете сделать то же самое, как сказал Жену Magloire, но быть уверенным в продлить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); 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^