7

我真的是 Symfony 的新手,我正在尝试使用 FosUserBundle 向用户注册一个角色,但我无法管理如何去做。实际上,我还集成了 PUGXMultiUserBundle,以便为两个不同的角色提供两种不同的形式。谁能帮我?

提前致谢

- 更新 -

我报告我的代码以便清楚地解释。我使用PUGXMultiUserBundle的指南创建了这个文件

这是我的实体:

//C:\BitNami\wampstack-5.4.23-0\frameworks\symfony\src\Acme\ManagementBundle\Entity\UserGroundStation.php
<?php

namespace Acme\ManagementBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use PUGX\MultiUserBundle\Validator\Constraints\UniqueEntity;

/**
 * @ORM\Entity
 * @ORM\Table(name="user_GroundStation")
 * @UniqueEntity(fields = "username", targetClass = "Acme\ManagementBundle\Entity\User", message="fos_user.username.already_used")
 * @UniqueEntity(fields = "email", targetClass = "Acme\ManagementBundle\Entity\User", message="fos_user.email.already_used")
 */
class UserGroundStation extends User
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
}

这是控制器

C:\BitNami\wampstack-5.4.23-0\frameworks\symfony\src\Acme\ManagementBundle\ControllerRegistrationController.php
<?php

namespace Acme\ManagementBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class RegistrationController extends Controller
{
    public function registerUserGroundStationAction()
    {
        return $this->container
                    ->get('pugx_multi_user.registration_manager')
                    ->register('Acme\ManagementBundle\Entity\UserGroundStation');
    }
}

抱歉这个愚蠢的问题,但这是我的第一个项目,我觉得有点不对劲。

--更新--已解决--

我在这里找到了解决方案 对不起,问题的重复,我没有通过谷歌找到它。

4

2 回答 2

12

将角色(例如 ROLE_ADMIN)分配给用户的方法如下所示。

//Get the enity manager
$em = $this->getDoctrine()->getManager();
//Get the user with name admin
$user= $em->getRepository("<your vendor>\<your bundle>\Entity\User")->findBy(Array("name" => "admin"));
//Set the admin role
$user->addRole("ROLE_ADMIN");
//Save it to the database
$em->persist($user);
$em->flush();

您还可以在 User Entity 类的构造函数中设置角色,如下所示:

public function __construct()
{
    parent::__construct();
    $this->addRole("ROLE_ADMIN");
}

请记住,在构造函数中设置角色意味着它不会保存在数据库中(除非您的持久化和刷新)并且它适用于每个用户。
如果您还有其他问题,请告诉我。

PS:如果您使用 Sonata Admin 捆绑包,则可以使用位于 Admin 部分的表单来设置用户的角色

于 2013-12-18T13:47:30.920 回答
5

这也可以与控制台合二为一:

Symfony 2

php app/console fos:user:promote theusername ROLE_ADMIN

Symfony 3

php bin/console fos:user:promote theusername ROLE_ADMIN

您还可以使用 CLI 激活/停用和其他各种功能。

http://symfony.com/doc/current/bundles/FOSUserBundle/command_line_tools.html

于 2016-05-05T01:06:29.853 回答