Angenommen Ressource = Modul/controller/action...
Man baut sich z.B. eine kleine Klasse /library/My/DbAcl.php (Achtung: spontaner, ungetesteter Code):
PHP-Code:
class My_DbAcl {
protected $_acl;
public function __construct(Zend_Db_Adapter $db) {
$this->_acl = new Zend_Acl();
// Einlesen der Resources
$select = $db->select()->from('tabelle_resources')->....;
foreach($select->fetchAll() as $row) {
$this->_acl->addResource(new Zend_Acl_Resource($row['rec_module'].'/'.$row['rec_controller'].'/'.$row['rec_action'], $row['res_parent_id']);
}
// Das gleiche Spiel mit Roles/Rollen (Als Parent-Gruppe kann man auch hier eine definieren, z.B. ne Gast-Gruppe mit minimalen Rechten)
$select = $db->select()->from('tabelle_roles')->....;
foreach($select->fetchAll() as $row) {
$this->_acl->addRole(new Zend_Acl_Resource($row['rol_name'], $row['rol_parent']);
}
// Das gleiche Spiel anschließend mit den Rechten
$select = $db->select()->from('tabelle_rechte')->join('tabelle_res', ...)->join('tabelle_roles', ...)->...;
foreach($select->fetchAll() as $row) {
if($row['allow'])
$this->_acl->allow($row['gruppe'], $row['resource']);
else
$this->_acl->deny($row['gruppe'], $row['resource']);
}
}
public function isAllowed($gruppe, $module, $controller, $action) {
// Evtl. noch mit has() pruefen, etc.
return $this->_acl->isAllowed($gruppe, $module.'/'.$controller.'/'.$action);
}
}
Die Berechtigung kann dann in einem Plugin abgefragt werden.
Hilft das weiter?
Lesezeichen