Utilizzo di un proxy come ACL

0

Sto costruendo un'applicazione MVC in PHP, utilizzando Zend Framework.

Il mio modello include i livelli del modello di dominio e del mappatore. Sto cercando di mantenere il modello di dominio in condizioni di prim'ordine e sono riuscito a tenerlo libero dal codice relativo alla persistenza. Ora sto cercando di trovare una soluzione per ACL.

Ho regole ACL "generali" che possono essere facilmente applicate in un livello di servizio, ma ho anche alcune regole granulose molto sottili. Le regole a grana fine si applicano a livello di proprietà e influiscono sul fatto che l'utente corrente possa modificare un campo e, in tal caso, quale sia l'intervallo di valori consentiti.

Attualmente sto pensando di usare il pattern proxy e che il proxy dovrebbe estendere l'oggetto reale (per salvarmi dovendo reindirizzare il 100% delle chiamate). Suona ragionevole? Esiste un'opzione migliore?

    
posta Kim 09.07.2013 - 07:14
fonte

1 risposta

2

Se estendi la tua classe ACL dalla classe originale, non segui il pattern Proxy. Un Proxy controlla l'accesso a un determinato argomento, implementando la stessa interfaccia del soggetto.

Usando i tratti in PHP, puoi costruire un Decorator generico, che puoi usare per tutti i Proxy e Decoratori.

interface MyModel {...}

class ConcreteModel implements MyModel
{
    // Your properties and methods as usual
}

trait Decorator
{
    private $subject;

    public function __call($method, $args)
    {
        return call_user_func_array($method, $args);
    }

    // You might want to implement __callStatic, __get, and __set, too
}

class AclProxy implements MyModel
{
    use Decorator;

    public function __construct(MyModel $model)
    {
        $this->subject = $model;
    }

    // Your specific overrides go here
}
    
risposta data 10.07.2013 - 15:59
fonte

Leggi altre domande sui tag