Ho un gran numero di classi PHP che eseguono la logica di business della mia applicazione, ad es.
class FileMaker{
public function makeFile(){
//some code here to make a file
}
}
Ora ho bisogno di aggiungere controlli delle autorizzazioni a loro. Voglio evitare di dover copiare / incollare $ this- > checkPermissions () o simili in ogni metodo in ogni classe. Qual è il modo migliore per raggiungere questo obiettivo?
Stavo pensando ad un tipo di schema di decorazione che potrebbe aggiungere controlli delle autorizzazioni, ad es.
//decorator that can be used to check permissions
class PermissionsDecorator{
private $ob;
public function __construct($ob){
$this->ob = $ob;
}
//magic method which is called when any function is called
public function __call($name,$arguments){
if($this->hasPermission(get_class($this->ob), $name)){
call_user_func_array(array($this->ob,$name),$arguments);
}else{
throw new Exception('You do not have permission to perform this action.');
}
}
public function hasPermission($class,$method){
echo 'does the user have permission on '.$class.'->'.$method.'?<br/>';
//do some logic here to work out whether the user has permission
return true;
}
}
Il decoratore sopra potrebbe applicarsi a tutte le classi perché usa il metodo magico __call, piuttosto che specificare i metodi esatti da chiamare. Quindi potrei usare codice come:
$fm = new PermissionsDecorator(new FileMaker());
Però mi sembra un po '"hacky". C'è un modo standard per farlo? O dovrò semplicemente copiare / incollare i permessi di controllo ovunque?