Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Assign a Role with FosUserBundle

I'm really new to Symfony, I'm trying to register a ROLE to a User with FosUserBundle but I can't manage how to do it. Actually I integrated also PUGXMultiUserBundle in order to have two different form for two different roles. Can anyone help me?

Thanks in advance

--UPDATE--

I report my code in order to explain clearly. I create this files with the guide of PUGXMultiUserBundle

This is my entity:

//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;
}

And this is the controller

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');
    }
}

Sorry for the dumb question, but it's my first project and I feel a bit misplace.

--UPDATE--SOLVED--

I found the solution here Sorry for the redundance of the question, I didn't find it by Google.

like image 371
Gianni Alessandro Avatar asked Dec 18 '13 13:12

Gianni Alessandro


2 Answers

A way to assign a role, for example ROLE_ADMIN, to a user goes like this.

//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();

You can also set the role in the constructor of the User Entity class, which goes like this:

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

Remember that setting the role in the constructor means that's it is not saved in the database(unless your persist and flush) and that it is applied to every user.
If you have some additional questions please let me know.

PS: if you use the Sonata Admin bundle the user's role can be set with a form located in the Admin section

like image 197
Robin Hermans Avatar answered Nov 09 '22 15:11

Robin Hermans


This can be one with the console as well:

Symfony 2

php app/console fos:user:promote theusername ROLE_ADMIN

Symfony 3

php bin/console fos:user:promote theusername ROLE_ADMIN

You can also activate/deactivate and various other things with the CLI.

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

like image 27
Yes Barry Avatar answered Nov 09 '22 15:11

Yes Barry