Doctrina: ¿Relación uno a uno?

Estoy creando entidades para un proyecto de Symfony2 en el trabajo.

Estoy tratando de hacer un sistema que controle el acceso a ciertos recursos en función de una organización (una empresa) y de un rol. En resumen, los roles son los mismos para todas las empresas, pero una empresa puede hacer que un recurso esté disponible para un rol, mientras que otra puede no quererlo.

En cuanto a los recursos, representan algunas acciones y contenidos, como la creación de esto, la edición de aquello, etc.

Intenté resolver este problema con la siguiente entidad. Representa una relación uno a uno entre mis tres entidades Organización, Rol y Recurso.

Quería saber si ese tipo de relación era posible/buena, o si hay otra forma de administrar los recursos.

/**
 * @ORM\Entity
 */
class Organisation_Role_Resource
{
    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Aurae\UserBundle\Entity\Organisation")
     */
    private $organisation;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Aurae\UserBundle\Entity\Role")
     */
    private $role;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Aurae\UserBundle\Entity\Resource")
     */
    private $resource;

¿Tiene algún consejo sobre cómo resolver este problema?

¿Hay otra/mejor manera de representar los recursos (que son, de hecho, páginas y enlaces) y administrar su acceso?

preguntado el 22 de mayo de 12 a las 15:05

1 Respuestas

Si bien este podría ser un enfoque bastante válido, realmente estaría reinventando la rueda.

Symfony2 ya lo tiene todo implementado como 'Listas de control de acceso' o (ACL):

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

Échale un vistazo.... Creo que cubre todo lo que necesitas...

contestado el 22 de mayo de 12 a las 15:05

Gracias por su respuesta. Ya había leído algunas cosas sobre el ACL, pero no podía ver si realmente cubría lo que necesitaba. No obstante lo investigaré, gracias! - gabriel theron

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.