Con este bundle se manejaran los usuarios, grupos y permisos desde la base de datos usando la versión 2.3 de Symfony2, la limitante es que sólo funcionará con Doctrine.
Pueden seguir el código de este tutorial clonando el repositorio que se encuentra en github Curso Symfony2.
Requisitos para seguir este tutorial
Es necesario tener conocimientos básicos en Symfony2 para poder seguir este tutorial.
- Controlador
- Entidades
- Repositorio
- Plantillas
Definiendo las Entidades
Antes de definir las entidades es necesario crear el bundle en el que se van a almacenar las entidades con la instruccion generate:bundle, en este caso el bundle se ha nombrado XanaduSeguridadBundle.Las entidades que tendrá el bundle son las siguientes.
- Usuarios
- Perfiles
- Grupos
- Permisos
Entidad Usuarios
La entidad Usuarios tendrá asignados los siguientes campos.Campo | Descripcion |
---|---|
id | |
nombreUsuario | |
password | |
perfil | Relación hacia la entidad Perfiles |
grupos | Relación hacia la entidad Grupos |
permisos | Relación hacia la entidad Permisos |
<?php namespace Xanadu\SeguridadBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Usuarios * * @ORM\Table() * @ORM\Entity */ class Usuarios { /** * @var integer * * @ORM\Column(name="Id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORM\Column(name="NombreUsuario", type="string", length=30) */ private $nombreUsuario; /** * @var string * * @ORM\Column(name="Password", type="string", length=255) */ private $password; /** * @var string * * @ORM\Column(name="Email", type="string", length=60) */ private $email; /** * * @ORM\OneToOne(targetEntity="Perfiles", mappedBy="usuario", cascade={"all"}) */ private $perfil; /** * @ORM\ManyToMany(targetEntity="Grupos") * @ORM\JoinTable(name="UsuariosHasGrupos", * joinColumns={@ORM\JoinColumn(name="UsuarioId", referencedColumnName="Id")}, * inverseJoinColumns={@ORM\JoinColumn(name="GrupoId", referencedColumnName="Id")} * ) */ private $grupos; /** * * @ORM\ManyToMany(targetEntity="Permisos") * @ORM\JoinTable(name="UsuariosHasPermisos", * joinColumns={@ORM\JoinColumn(name="UsuarioId", referencedColumnName="Id")}, * inverseJoinColumns={@ORM\JoinColumn(name="PermisoId", referencedColumnName="Id")} * ) */ private $permisos; }
Entidad Perfiles
La entidad Perfiles tendrá asignados los siguientes campos.Campo | Descripcion |
---|---|
id | |
usuario | Relación hacia la entidad Usuarios |
telefonoParticular | |
domicilio |
<?php namespace Xanadu\SeguridadBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Perfiles * * @ORM\Table() * @ORM\Entity */ class Perfiles { /** * @var integer * * @ORM\Column(name="Id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * * @ORM\OneToOne(targetEntity="Usuarios", inversedBy="perfil") * @ORM\JoinColumn(name="UsuarioId", referencedColumnName="Id") */ private $usuario; /** * @var string * * @ORM\Column(name="TelefonoParticular", type="string", length=30) */ private $telefonoParticular; /** * @var string * * @ORM\Column(name="Domicilio", type="string", length=150) */ private $domicilio; }
Entidad Grupos
La entidad Grupos tendrá asignados los siguientes campos.Campo | Descripcion |
---|---|
id | |
nombre | |
descripcion | |
permisos | Relación hacia la entidad Permisos |
<?php namespace Xanadu\SeguridadBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Grupos * * @ORM\Table() * @ORM\Entity */ class Grupos { /** * @var integer * * @ORM\Column(name="Id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORM\Column(name="Nombre", type="string", length=30) */ private $nombre; /** * @var string * * @ORM\Column(name="Descripcion", type="string", length=30) */ private $descripcion; /** * @ORM\ManyToMany(targetEntity="Permisos") * @ORM\JoinTable(name="GruposHasPermisos", * joinColumns={@ORM\JoinColumn(name="GrupoId", referencedColumnName="Id")}, * inverseJoinColumns={@ORM\JoinColumn(name="PermisosId", referencedColumnName="Id")} * ) */ private $permisos; }
Entidad Permisos
La entidad Permisos tendrá asignados los siguientes campos.Campo | Descripcion |
---|---|
id | |
nombre | |
descripcion |
<?php namespace Xanadu\SeguridadBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Permisos * * @ORM\Table() * @ORM\Entity */ class Permisos { /** * @var integer * * @ORM\Column(name="Id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORM\Column(name="Nombre", type="string", length=30) */ private $nombre; /** * @var string * * @ORM\Column(name="Descripcion", type="string", length=255) */ private $descripcion; }Aqui sólo se muestra la definición de los campos en las entidades, para generar los métodos para acceder a los atributos se tiene que ejecutar el comando doctrine:generate:entities XanaduSeguridadBundle NombreEntidad.
Para consultar el código visto hasta este momento en la aplicación de ejemplo, consulta el tag con la instruccion git checkout seguridad1.0.
Generar los CRUD
Una vez que se han definido las entidades el siguiente paso es generar las acciones para (C) Crear , (R) Recuperar , (U) Actualizar y (D) Eliminar registros. Para hacerlo de una forma rápida se hace uso del comando app/console doctrine:generate:crud con los siguientes parámetros dependiendo de la entidad:Pregunta | Respuesta |
---|---|
The Entity shortcut name | XanaduSeguridadBundle:Usuarios |
Do you want to generate the "write" actions | yes |
Configura... (yml, xml, php, or annotation) | yml |
Routes prefix | /seguridad/usuarios |
Do you confirm generation | yes |
Confirm automatic update of the Routing | yes |
http://localhost/Curso/web/app_dev.php/seguridad/permisos
Para consultar el código visto hasta este momento en la aplicación de ejemplo, consulta el tag con la instruccion git checkout seguridad1.1.
No hay comentarios.:
Publicar un comentario