¿Cuál es la forma correcta de implementar Auth / ACL en MVC?

7

Estoy pensando en hacer un sistema MVC Auth / ACL correctamente diseñado. I think Quiero que la autenticación de un usuario (y el manejo de la sesión) sea separada del sistema ACL. (No sé por qué, pero parece una buena idea por las cosas que he leído).

¿Qué tiene que ver MVC con esta pregunta que hace? Porque deseo que la aplicación esté bien integrada con mi ACL. Un ejemplo de un controlador (CodeIgniter):

<?php
class forums extends MX_Controller
{
    $allowed = array('users', 'admin');
    $need_login = true;

        function __construct()
        {
        //example of checking if logged in.
            if($this->auth->logged_in() && $this->auth->is_admin())
        {
            echo "you're logged in!";
        }
    }
    public function add_topic()
    {
        if($this->auth->allowed('add_topic')
        {
            //some add topic things.
        }
        else
        {
            echo 'not allowed to add topic';
        }
    }
}
?>

Mis pensamientos

$this->auth se cargará automáticamente en el sistema. Me gustaría verificar la matriz $allowed contra el usuario que actualmente está conectado (no) y reaccionar en consecuencia.

¿Es esta una buena manera de hacer las cosas? No he visto mucha literatura sobre integración de MVC y Auth. Quiero hacer las cosas lo más fácil posible.

    
pregunta WiseStrawberry 09.07.2012 - 17:21

2 respuestas

4

Mi enfoque dentro de Zend Framework ha sido tener una clase base de SecureController que todos los controladores que requieren autenticación deben ampliar. En el SecureController tengo una verificación de autenticación previa al envío para saber si un usuario ha iniciado sesión o si no, reenviará a la página de inicio de sesión.

Una vez completada la verificación de inicio de sesión, realizo una verificación de autorización para ver si el usuario puede acceder al recurso y la acción, el controlador generalmente está vinculado a un solo recurso (pero este comportamiento puede anularse) y la acción del controlador puede asignado a una acción de recursos.

Con esto en su lugar, lo único que debo hacer en cada controlador secundario es asignar el recurso y la acción a lo que se está haciendo sin tener que volver a invocar los controles de seguridad.

Si necesito verificaciones específicas de ACL, especialmente en la generación de vistas, puedo usar la instancia Zend_ACL que está vinculada a la sesión del usuario

    
respondido por el Stephen Senkomago Musoke 14.10.2012 - 20:24
1

Traté de encontrar mis propias explicaciones, pero encontré una publicación muy completa en medio de la compilación de mi respuesta. Esperamos que encuentre más de lo que pidió en esta publicación: implementación de PHP ACL

Edir: Básicamente, la idea detrás de la publicación sugiere usar el patrón de decorador (consulte Wiki para obtener más información). En un concepto simple, este patrón recomienda tomar su objeto y colocarlo dentro de otro objeto, que actuará como una cubierta protectora. De esta manera, su código no será necesario para extender la clase original.

    
respondido por el EL Yusubov 09.07.2012 - 17:34

Lea otras preguntas en las etiquetas