Aprende cómo agregar un rol específico para un usuario en Symfony 3 usando FOSUserBundle.

Un rol de usuario es un rol predefinido que permite a los usuarios ejecutar diferentes actividades en su aplicación. Hay muchos puntos que manejar cuando trabaja con permisos de usuario (no se mencionan aquí), para que sea más fácil para el usuario y para el desarrollador, la implementación de Roles es una característica útil (y básicamente requerida) de un Usuario. sistema .

En este artículo, aprenderá cómo agregar roles a un usuario usando FOSUserBundle en Symfony 3.

Con doctrine

Puede agregar un rol a un usuario utilizando el addRolemétodo del objeto de usuario.

<?php

namespace ourcodeworld\adminBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class AdminController extends Controller
{
    public function indexAction()
    {
        // Recuperar administrador de entidad de doctrine
        $em = $this->getDoctrine()->getManager();

        // Busque UserEntity, recupere el repositorio
        $userRepository = $em->getRepository("myBundle\Entity\User");
        // o $userRepository = $em->getRepository("myBundle:User");

        $user = $userRepository->findOneBy(["username" => "AnyUsername"]);
        
        // ¡Agregue el rol que desee!
        $user->addRole("ROLE_ADMIN");

        // Guardar cambios en la base de datos
        $em->persist($user);
        $em->flush();
    }
}    

Con fos_user.user_manager

Puede crear un usuario utilizando el administrador de usuarios de fos, servicio que se puede recuperar del contenedor ( $this->get('serviceName')en un controlador o $container->get('')en cualquier otro lugar con el contenedor en contexto).

<?php

namespace ourcodeworld\adminBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class AdminController extends Controller
{
    public function indexAction()
    {
        $userManager = $this->get('fos_user.user_manager');

        // Utilice findUserby, findUserByUsername () findUserByEmail () findUserByUsernameOrEmail, findUserByConfirmationToken ($ token) o findUsers ()
        $user = $userManager->findUserBy(['id' => 1]);
        
        // ¡Agregue el rol que desee!
        $user->addRole("ROLE_ADMIN");
        // Actualizar roles de usuario
        $userManager->updateUser($user);
    }
}

En la clase de usuario

También puede establecer el rol en el constructor de la clase de entidad de usuario cada vez que se registra un usuario:

<?php
// src/Acme/UserBundle/Entity/User.php

namespace myBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    public function __construct()
    {
        parent::__construct();
        
        // Agregar rol
        $this->addRole("ROLE_ADMIN");
    }
}

El contexto de $this será específicamente el usuario base.

Con las herramientas de línea de comandos de FOSUserBundle

Por defecto, una aplicación Symfony que implemente FOSUserBundle, automáticamente tendrá acceso a las herramientas de línea de comandos de este paquete. Estas herramientas proporcionan un comando útil que le permite agregar un rol a un usuario, el  fos:user:promotecomando. Este comando le permite agregar un rol a un usuario o convertir al usuario en un superadministrador:

php bin/console fos:user:promote username ROLE_ADMIN

Que te diviertas ❤️!


Ingeniero de Software Senior en EPAM Anywhere. Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores