Php symfony存储用户角色的位置和方式

Php symfony存储用户角色的位置和方式,php,symfony,symfony-security,Php,Symfony,Symfony Security,大家好,我试图理解symfony中关于用户和用户角色的逻辑,以及它是如何工作的。我是symfony的新手,我遵循本教程: 在我的项目中,一切都很完美,但当我查看数据库时,我有user表,所有我注册的用户都像表中的数据 但用户角色的表在哪里?symfony如何知道谁是ROLE\u ADMIN和谁是ROLE\u主持人。如何实现所有具有特定角色的用户,并将该角色保存在数据库中,以便稍后从某个管理面板对其进行更改? ACL meybe?Symfony不负责存储您的角色。如果需要管理它们,您必须存储它们

大家好,我试图理解symfony中关于用户和用户角色的逻辑,以及它是如何工作的。我是symfony的新手,我遵循本教程:

在我的项目中,一切都很完美,但当我查看数据库时,我有
user
表,所有我注册的用户都像表中的数据

但用户角色的表在哪里?symfony如何知道谁是
ROLE\u ADMIN
和谁是
ROLE\u主持人
。如何实现所有具有特定角色的用户,并将该角色保存在数据库中,以便稍后从某个管理面板对其进行更改?
ACL meybe?

Symfony不负责存储您的角色。如果需要管理它们,您必须存储它们,例如,使用管理控制台

用户实体实现的
Symfony\Component\Security\Core\User\UserInterface
界面包含一个方法名
getRoles
,该方法应返回表示用户角色的字符串数组或
Symfony\Component\Security\Core\role\RoleInterface
数组。因此,您可以在项目中创建名为
Role
的实体,该实体实现
Symfony\Component\Security\Core\Role\RoleInterface
。然后将该实体链接到您的用户实体,抛出一个多个关联。最后实现getRoles方法,该方法应返回给定用户的角色


然后,您可以作为项目中的任何其他实体来管理您的角色

RoleInterface现在已被弃用,并将在4.0中删除,因此您可以像Genoud 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 );
    }

默认情况下,角色作为列存储在用户表中。它实际上是一个序列化数组,因此一个用户可以有多个角色。当然,如果您觉得有必要,您可以自己实现并拥有一个用户角色表。也许对你也有帮助