2012-04-11 11 views
12

Estoy intentando agregar Symfony 2.0 ACL a mi aplicación PHP sin marco. Debido a la falta de documentación sobre cómo usar el componente de seguridad como independiente, estoy totalmente confundido y me han sorprendido preguntas: ¿qué clase incluir primero? ¿Qué objeto a instancia? ¿Se puede usar sin modelos y controladores?Componente de seguridad de Symfony 2.0 como independiente

¿Alguna sugerencia sobre cómo comenzar o un buen enlace?

Gracias

+1

Sugeriría la ACL de Zend, porque es de un marco débilmente acoplado o "pegamento", y S2 es una pila completa. – SuperMykEl

Respuesta

2

Qué clase de incluir por primera vez?

Lo más probable es que necesite incluir al menos partes, si no todos, del núcleo de seguridad, y luego la implementación de ACL que desee utilizar. Puede ver las dependencias que se enumeran al comienzo de la implementación de ACL y ver qué se extienden. Por ejemplo, la ACL/DBAL tiene las siguientes dependencias denominadas en la cabecera:

namespace Symfony\Component\Security\Acl\Dbal; 

use Doctrine\DBAL\Driver\Connection; 
use Doctrine\DBAL\Driver\Statement; 
use Symfony\Component\Security\Acl\Model\AclInterface; 
use Symfony\Component\Security\Acl\Domain\Acl; 
use Symfony\Component\Security\Acl\Domain\Entry; 
use Symfony\Component\Security\Acl\Domain\FieldEntry; 
use Symfony\Component\Security\Acl\Domain\ObjectIdentity; 
use Symfony\Component\Security\Acl\Domain\RoleSecurityIdentity; 
use Symfony\Component\Security\Acl\Domain\UserSecurityIdentity; 
use Symfony\Component\Security\Acl\Exception\AclNotFoundException; 
use Symfony\Component\Security\Acl\Exception\NotAllAclsFoundException; 
use Symfony\Component\Security\Acl\Model\AclCacheInterface; 
use Symfony\Component\Security\Acl\Model\AclProviderInterface; 
use Symfony\Component\Security\Acl\Model\ObjectIdentityInterface; 
use Symfony\Component\Security\Acl\Model\PermissionGrantingStrategyInterface; 

Pero es probable que tenga que comprobar cada uno de los enumerados por sus dependencias, y cargar esos también.

Me gustaría hacer un seguimiento de las dependencias y hacer un seguimiento de lo que necesita qué. Elimina esas clases en una ubicación separada para que solo tengas lo que necesitas, y utiliza algún error de captura para determinar que lo tienes todo.

¿Cuál es el objeto de la instancia?

Su ACL. Si todas las dependencias están determinadas y cargadas, entonces debería poder instanciar el objeto de la clase ACL.

¿Se puede utilizar sin modelos y controladores?

Para ser honesto, no estoy seguro de que el uso de ACL fuera de S2 sea posible sin mucho trabajo, pero si puede obtener una instancia con todo lo que necesita, entonces debería ser capaz de usar el objeto sin un modelo MVC.

Desafortunadamente, por lo que entiendo de S2, es un marco completo de pila, y pretende ser todo o nada. pero si fuera a intentar hacerlo funcionar, esta sería la forma en que lo haría.

12

El SecurityServiceProvider para Silex podría ser un buen lugar para comenzar, ya que integra todos los servicios de componentes esenciales en un solo archivo. Aunque es grande, probablemente le resultará mucho más fácil de digerir que SecurityBundle de Symfony2.

Con el fin de mantener su cordura, debe considerar el uso de un contenedor de servicios para organizar todos estos objetos. En la clase de proveedor antes mencionada, la clase de Aplicación Silex es una instancia de Pimple, por lo que debería ser capaz de portarla de forma simple con un esfuerzo modesto. Vi esto porque la integración de un contenedor de servicio de Pimple en su aplicación debería ser menos invasivo que la adopción del marco Silex.

Una vez que tenga las clases de componentes de seguridad esenciales en funcionamiento, debería poder seguir junto con el ACL documentation y agregar servicios adicionales a su contenedor según sea necesario. En ese punto, las secciones específicas de ACL de SecurityBundle pueden resultar útiles, ya que puede centrarse en los bits relevantes. Tenga en cuenta que hay múltiples cookbook entries para ACL en la documentación.

+0

Más 1 para todo, aparte del servicio [contenedor] localizador anti-patrón. – Jimbo

0

Si quieres entender cómo utilizar el uso de componentes de Symfony2 y cómo integrar que dentro de su proyecto a continuación, lea Fabien Potencier blog 'create your own framework' post que sin duda le ayudará u para entender núcleo del marco y cómo para arrancar componente Symfony2 en su proyecto

También hay un buen documento para ACL en el sitio web de Symfony

+3

La serie de Fabien cubre una cantidad de componentes en forma independiente, pero el componente de Seguridad brilla por su ausencia. – jmikola

Cuestiones relacionadas