SlideShare a Scribd company logo
1 of 20
Symfony 2
ACL

                   Access Control Lists
           Listas para el Control de Acceso




Gonzalo Alonso
gonkpo@gmail.com
    @GonzaloAlonsoD
http://groups.google.com/group/symfony-2-argentina
ACL

En aplicaciones complejas, a menudo te
enfrentas al problema de que las decisiones de
acceso no se pueden basar únicamente en la
persona (Token) que está solicitando el acceso,
sino también implica un objeto dominio al cual se
está solicitando acceso. Aquí es donde entra en
juego el sistema ACL.
Escenario

Imagina que estas diseñando un sistema de blog
 donde un usuario puede administrarlo y publicar
    sus propias entradas. En este escenario,
   Entrada sería nuestro objeto dominio al cual
deseas restringir el acceso. Podrías tomar varios
  enfoques para lograr esto usando Symfony2,
   dos enfoques básicos (no exhaustivos) son:
Reforzar la seguridad en los métodos de tu
 

                  negocio:
Básicamente, significa mantener una referencia
dentro de cada comentario a todos los usuarios
  que tienen acceso, y luego comparar estos
          usuarios al Token provisto.

      Reforzar la seguridad con roles:
      

 En este enfoque, debes agregar un rol a cada
          objeto comentario, es decir,
ROLE_COMMENT_1, ROLE_COMMENT_2, etc.
Tomar una decisión



Los 2 métodos nombrados anteriormente son
 validos, afortunadamente, hay una manera
     mejor, de la cual hablaremos ahora.
Proceso de Arranque
           (bootstrapping):
    En primer lugar, tienes que configurar la
 conexión al sistema ACL que se supone vas a
                       usar:

YAML

# app/config/security.yml
security:
  acl:
    connection: default
Generar estructura de la base de
              datos:
Después de configurar la conexión, importamos
       la estructura de la base de datos.
 Afortunadamente, existe una tarea para eso.
    Basta con ejecutar la siguiente orden:

$ php app/console init:acl
Código completo
if ($form->isValid()) {
         $entityManager = $this->getDoctrine()->getManager();
         $entityManager->persist($entrada);
         $entityManager->flush();
         $aclProvider = $this->get('security.acl.provider');
         $objectIdentity = ObjectIdentity::fromDomainObject($entrada);
         $acl = $aclProvider->createAcl($objectIdentity);
         $securityContext = $this->get('security.context');
         $user = $securityContext->getToken()->getUser();
         $securityIdentity = UserSecurityIdentity::fromAccount($user);
         $acl->insertObjectAce($securityIdentity,
MaskBuilder::MASK_OWNER);
         $aclProvider->updateAcl($acl);
       }
Persistencia de datos:



// debes persistir los datos en la bd
$entityManager->persist($entrada);
$entityManager->flush();
Creando ACL:


// creando la ACL
$aclProvider = $this->get('security.acl.provider');
$objectIdentity =
ObjectIdentity::fromDomainObject($entrada);
$acl = $aclProvider->createAcl($objectIdentity);
En primer lugar ->createAcl() no acepta objetos
      de dominio directamente, sino sólo
 implementaciones de ObjectIdentityInterface.

 Este paso adicional te permite trabajar con ACL,
    incluso cuando no tienes a mano ninguna
instancia real del objeto dominio. Será muy útil si
   deseas comprobar los permisos de un gran
  número de objetos sin tener que hidratar estos
                      objetos.
Recupero usuario logueado:

// recupera la identidad de seguridad del usuario
// registrado actualmente
$securityContext = $this->get('security.context');
$user = $securityContext->getToken()-
>getUser();
$securityIdentity =
UserSecurityIdentity::fromAccount($user);
Otorgo los permisos:



// otorga permiso de propietario
$acl->insertObjectAce($securityIdentity,
MaskBuilder::MASK_OWNER);
$aclProvider->updateAcl($acl);
La otra parte interesante es la llamada a
     ->insertObjectAce(). En el ejemplo, estas
otorgando acceso de propietario al comentario al
          usuario que ha iniciado sesión.
MaskBuilder::MASK_OWNER es una máscara de
  bits enteros predefinida; no te debe preocupar
   que el constructor de la máscara abstraiga la
mayoría de los detalles técnicos, porque gracias a
esta técnica puedes almacenar muchos permisos
diferentes en la fila de la base de datos, lo cual te
    da un considerable impulso en rendimiento.
Comprobando el acceso:
$securityContext = $this->get('security.context');

// verifica el acceso para edición
if (false === $securityContext->isGranted('EDIT',
$entrada))
       {
          throw new AccessDeniedException();
       }

// recupera el objeto entrada, y realiza tu edición
Permisos acumulados
En el ejemplo, sólo concediste al usuario el
permiso OWNER base. Si bien este además
permite efectivamente al usuario realizar
cualquier operación, como ver, editar, etc., sobre
el objeto dominio, hay casos en los que deseas
conceder explícitamente estos permisos.
Crear máscaras con MaskBuilder
$builder = new MaskBuilder();
$builder
    ->add('view')
    ->add('edit')
    ->add('delete')
    ->add('undelete')
;
$mask = $builder->get(); // int(29)
Utilizar máscara creada
Esta máscara de bits de enteros, se puede utilizar para
conceder a un usuario los permisos base añadidos
anteriormente:


$identity = new UserSecurityIdentity('david',
'AcmeUserBundleEntityUser');
$acl->insertObjectAce($identity, $mask);


El usuario ahora puede ver, editar, borrar, y recuperar objetos
eliminados.
REFERENCIAS



Documentación Symfony2

http://symfony.com/doc/current/cookbook/security/acl.html

More Related Content

What's hot

Seguridad 2° exp_ooo
Seguridad 2° exp_oooSeguridad 2° exp_ooo
Seguridad 2° exp_oooYuzel Sederap
 
Java con base de datos
Java con base de datosJava con base de datos
Java con base de datosJhiZzelh T Cz
 
Universidad tecnica de babhoyo
Universidad tecnica de babhoyoUniversidad tecnica de babhoyo
Universidad tecnica de babhoyoestudiante
 
Seguridad 2° exp_ooo
Seguridad 2° exp_oooSeguridad 2° exp_ooo
Seguridad 2° exp_oooYuzel Sederap
 
Sql injection
Sql injectionSql injection
Sql injectionMinoxx
 
Habilitacion de Autentificaion de sql
Habilitacion de Autentificaion de sql Habilitacion de Autentificaion de sql
Habilitacion de Autentificaion de sql KevinFD
 
2. administracion de la seguridad
2.  administracion de la seguridad2.  administracion de la seguridad
2. administracion de la seguridadNestor Lopez
 
Taller oracle seguridad backup recovery 22092008
Taller oracle seguridad backup recovery 22092008Taller oracle seguridad backup recovery 22092008
Taller oracle seguridad backup recovery 22092008wilder sanchez
 
Inyecciones sql para todos
Inyecciones sql para todosInyecciones sql para todos
Inyecciones sql para todoscsaralg
 
P R A C T I C A
P R A C T I C AP R A C T I C A
P R A C T I C ADanica M
 
Práctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScriptPráctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScriptjubacalo
 
Aplicaciones para sistemas distribuidos slide
Aplicaciones para sistemas distribuidos slideAplicaciones para sistemas distribuidos slide
Aplicaciones para sistemas distribuidos slidemarieuri
 

What's hot (20)

Seguridad 2° exp_ooo
Seguridad 2° exp_oooSeguridad 2° exp_ooo
Seguridad 2° exp_ooo
 
codigos de computadora
codigos de computadora codigos de computadora
codigos de computadora
 
Java con base de datos
Java con base de datosJava con base de datos
Java con base de datos
 
Admon oracle
Admon oracleAdmon oracle
Admon oracle
 
Universidad tecnica de babhoyo
Universidad tecnica de babhoyoUniversidad tecnica de babhoyo
Universidad tecnica de babhoyo
 
Seguridad 2° exp_ooo
Seguridad 2° exp_oooSeguridad 2° exp_ooo
Seguridad 2° exp_ooo
 
Sql injection
Sql injectionSql injection
Sql injection
 
Seguridad tsql sql server 2008
Seguridad tsql sql server 2008Seguridad tsql sql server 2008
Seguridad tsql sql server 2008
 
Habilitacion de Autentificaion de sql
Habilitacion de Autentificaion de sql Habilitacion de Autentificaion de sql
Habilitacion de Autentificaion de sql
 
2. administracion de la seguridad
2.  administracion de la seguridad2.  administracion de la seguridad
2. administracion de la seguridad
 
Taller oracle seguridad backup recovery 22092008
Taller oracle seguridad backup recovery 22092008Taller oracle seguridad backup recovery 22092008
Taller oracle seguridad backup recovery 22092008
 
Inyecciones sql para todos
Inyecciones sql para todosInyecciones sql para todos
Inyecciones sql para todos
 
Redes
RedesRedes
Redes
 
Manual de programador sistema experto bovino online
Manual de programador   sistema experto bovino onlineManual de programador   sistema experto bovino online
Manual de programador sistema experto bovino online
 
Eliminando SQL injection
Eliminando SQL injectionEliminando SQL injection
Eliminando SQL injection
 
Sql 2008
Sql 2008Sql 2008
Sql 2008
 
Grupo 8.pptx
Grupo 8.pptxGrupo 8.pptx
Grupo 8.pptx
 
P R A C T I C A
P R A C T I C AP R A C T I C A
P R A C T I C A
 
Práctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScriptPráctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScript
 
Aplicaciones para sistemas distribuidos slide
Aplicaciones para sistemas distribuidos slideAplicaciones para sistemas distribuidos slide
Aplicaciones para sistemas distribuidos slide
 

Similar to Symfony2 - ACL

Clase 13 seguridad
Clase 13   seguridad Clase 13   seguridad
Clase 13 seguridad hydras_cs
 
Vulnerabilidades en aplicaciones web
Vulnerabilidades en aplicaciones webVulnerabilidades en aplicaciones web
Vulnerabilidades en aplicaciones webRealTIC
 
Php Bitter Sweet Symfony!
Php Bitter Sweet Symfony!Php Bitter Sweet Symfony!
Php Bitter Sweet Symfony!Ricard Luquero
 
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdfAsegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdfJose Manuel Ortega Candel
 
Taller oracle ccfcffcfcfcfcfcffc
Taller oracle ccfcffcfcfcfcfcffcTaller oracle ccfcffcfcfcfcfcffc
Taller oracle ccfcffcfcfcfcfcffcjinkalel kalel
 
Seguridad en access
Seguridad en accessSeguridad en access
Seguridad en accessssuser3a82fb
 
Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladoresPedro Cambra
 
Clase 5 controller
Clase 5 controllerClase 5 controller
Clase 5 controllerhydras_cs
 
Ejercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxEjercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxssuser2e6b96
 
Taller desarrollando sitios web multiplataforma
Taller desarrollando sitios web multiplataformaTaller desarrollando sitios web multiplataforma
Taller desarrollando sitios web multiplataformaLuis Beltran
 
Clase 10 formularios
Clase 10   formulariosClase 10   formularios
Clase 10 formularioshydras_cs
 

Similar to Symfony2 - ACL (20)

Clase 13 seguridad
Clase 13   seguridad Clase 13   seguridad
Clase 13 seguridad
 
Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3
 
Tema 7
Tema 7Tema 7
Tema 7
 
Vulnerabilidades en aplicaciones web
Vulnerabilidades en aplicaciones webVulnerabilidades en aplicaciones web
Vulnerabilidades en aplicaciones web
 
APIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptxAPIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptx
 
Php Bitter Sweet Symfony!
Php Bitter Sweet Symfony!Php Bitter Sweet Symfony!
Php Bitter Sweet Symfony!
 
Presentacion YII
Presentacion YIIPresentacion YII
Presentacion YII
 
Trabajo de base de datos en sqlserver
Trabajo de base de datos en sqlserverTrabajo de base de datos en sqlserver
Trabajo de base de datos en sqlserver
 
9.laravel
9.laravel9.laravel
9.laravel
 
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdfAsegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
 
Taller oracle ccfcffcfcfcfcfcffc
Taller oracle ccfcffcfcfcfcfcffcTaller oracle ccfcffcfcfcfcfcffc
Taller oracle ccfcffcfcfcfcfcffc
 
Seguridad en access
Seguridad en accessSeguridad en access
Seguridad en access
 
Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladores
 
Cuentas de usuario
Cuentas de usuarioCuentas de usuario
Cuentas de usuario
 
Cuentas de usuario
Cuentas de usuarioCuentas de usuario
Cuentas de usuario
 
Clase 5 controller
Clase 5 controllerClase 5 controller
Clase 5 controller
 
Ejercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxEjercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docx
 
Taller desarrollando sitios web multiplataforma
Taller desarrollando sitios web multiplataformaTaller desarrollando sitios web multiplataforma
Taller desarrollando sitios web multiplataforma
 
Clase 10 formularios
Clase 10   formulariosClase 10   formularios
Clase 10 formularios
 
Practica9 bases de datos
Practica9 bases de datosPractica9 bases de datos
Practica9 bases de datos
 

Recently uploaded

EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 

Recently uploaded (11)

EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 

Symfony2 - ACL

  • 2. ACL Access Control Lists Listas para el Control de Acceso Gonzalo Alonso gonkpo@gmail.com @GonzaloAlonsoD http://groups.google.com/group/symfony-2-argentina
  • 3. ACL En aplicaciones complejas, a menudo te enfrentas al problema de que las decisiones de acceso no se pueden basar únicamente en la persona (Token) que está solicitando el acceso, sino también implica un objeto dominio al cual se está solicitando acceso. Aquí es donde entra en juego el sistema ACL.
  • 4. Escenario Imagina que estas diseñando un sistema de blog donde un usuario puede administrarlo y publicar sus propias entradas. En este escenario, Entrada sería nuestro objeto dominio al cual deseas restringir el acceso. Podrías tomar varios enfoques para lograr esto usando Symfony2, dos enfoques básicos (no exhaustivos) son:
  • 5. Reforzar la seguridad en los métodos de tu  negocio: Básicamente, significa mantener una referencia dentro de cada comentario a todos los usuarios que tienen acceso, y luego comparar estos usuarios al Token provisto. Reforzar la seguridad con roles:  En este enfoque, debes agregar un rol a cada objeto comentario, es decir, ROLE_COMMENT_1, ROLE_COMMENT_2, etc.
  • 6. Tomar una decisión Los 2 métodos nombrados anteriormente son validos, afortunadamente, hay una manera mejor, de la cual hablaremos ahora.
  • 7. Proceso de Arranque (bootstrapping): En primer lugar, tienes que configurar la conexión al sistema ACL que se supone vas a usar: YAML # app/config/security.yml security: acl: connection: default
  • 8. Generar estructura de la base de datos: Después de configurar la conexión, importamos la estructura de la base de datos. Afortunadamente, existe una tarea para eso. Basta con ejecutar la siguiente orden: $ php app/console init:acl
  • 9. Código completo if ($form->isValid()) { $entityManager = $this->getDoctrine()->getManager(); $entityManager->persist($entrada); $entityManager->flush(); $aclProvider = $this->get('security.acl.provider'); $objectIdentity = ObjectIdentity::fromDomainObject($entrada); $acl = $aclProvider->createAcl($objectIdentity); $securityContext = $this->get('security.context'); $user = $securityContext->getToken()->getUser(); $securityIdentity = UserSecurityIdentity::fromAccount($user); $acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_OWNER); $aclProvider->updateAcl($acl); }
  • 10. Persistencia de datos: // debes persistir los datos en la bd $entityManager->persist($entrada); $entityManager->flush();
  • 11. Creando ACL: // creando la ACL $aclProvider = $this->get('security.acl.provider'); $objectIdentity = ObjectIdentity::fromDomainObject($entrada); $acl = $aclProvider->createAcl($objectIdentity);
  • 12. En primer lugar ->createAcl() no acepta objetos de dominio directamente, sino sólo implementaciones de ObjectIdentityInterface. Este paso adicional te permite trabajar con ACL, incluso cuando no tienes a mano ninguna instancia real del objeto dominio. Será muy útil si deseas comprobar los permisos de un gran número de objetos sin tener que hidratar estos objetos.
  • 13. Recupero usuario logueado: // recupera la identidad de seguridad del usuario // registrado actualmente $securityContext = $this->get('security.context'); $user = $securityContext->getToken()- >getUser(); $securityIdentity = UserSecurityIdentity::fromAccount($user);
  • 14. Otorgo los permisos: // otorga permiso de propietario $acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_OWNER); $aclProvider->updateAcl($acl);
  • 15. La otra parte interesante es la llamada a ->insertObjectAce(). En el ejemplo, estas otorgando acceso de propietario al comentario al usuario que ha iniciado sesión. MaskBuilder::MASK_OWNER es una máscara de bits enteros predefinida; no te debe preocupar que el constructor de la máscara abstraiga la mayoría de los detalles técnicos, porque gracias a esta técnica puedes almacenar muchos permisos diferentes en la fila de la base de datos, lo cual te da un considerable impulso en rendimiento.
  • 16. Comprobando el acceso: $securityContext = $this->get('security.context'); // verifica el acceso para edición if (false === $securityContext->isGranted('EDIT', $entrada)) { throw new AccessDeniedException(); } // recupera el objeto entrada, y realiza tu edición
  • 17. Permisos acumulados En el ejemplo, sólo concediste al usuario el permiso OWNER base. Si bien este además permite efectivamente al usuario realizar cualquier operación, como ver, editar, etc., sobre el objeto dominio, hay casos en los que deseas conceder explícitamente estos permisos.
  • 18. Crear máscaras con MaskBuilder $builder = new MaskBuilder(); $builder ->add('view') ->add('edit') ->add('delete') ->add('undelete') ; $mask = $builder->get(); // int(29)
  • 19. Utilizar máscara creada Esta máscara de bits de enteros, se puede utilizar para conceder a un usuario los permisos base añadidos anteriormente: $identity = new UserSecurityIdentity('david', 'AcmeUserBundleEntityUser'); $acl->insertObjectAce($identity, $mask); El usuario ahora puede ver, editar, borrar, y recuperar objetos eliminados.