Zend___Acl hangi bir kullanıcının belirli kaynaklara erişimi olup olmadığını tanımlamak için kullanılır içine bak. Bir kaynak oldukça çok şey olabilir, ama bu bağlamda size kaynak olarak denetleyicileri ve eylemleri tanımlamak için ACL kullanabilirsiniz. Kullanıcı giriş her zaman rolleri bir dizi (biz bir veritabanında saklayabilirsiniz) atanır. Yönlendirme tamamlandıktan sonra eklenti size, Kontrol ve Eylem için isteği edin. Zend_Auth yoluyla kullanıcı rollerini toplamak ve ACL karşı onları kontrol edin. ACL diyorsa kullanıcı, kaynağa erişmek hiçbir şey, başka bir ileri / hata denetleyicisi yönlendirme ve hatayı yazdırmak iznine sahip.
// Pseudo-code. You need to define the ACL and roles somehow.
class AclPlugin extends Zend_Controller_Plugin {
public function routeShutdown(Zend_Controller_Request_Abstract $request)
{
$controller = $request->getControllerName();
$action = $request->getActionName();
$roles = Zend_Auth::getInstance()->getRoles();
$acl = new MyAcl();
if($acl->hasAccess($roles, $controller, $action)) { return; }
// None of the user's roles gave her access to the requested
// controller/action, so re-write the request to the error controller
$request->setControllerName('error')
->setActionName('authorizationFailed')
->setParam('resource', array('controller' => $controller
'action' => $action));
}
}
class MyAcl extends Zend_Acl {
public function hasAccess($roles, $controller, $action) {
foreach($roles as $role) {
if($acl->isAllowed($role, $controller, $action)) {
return true; // Simplified. Here we say if one of the user roles can
// access a resource, that is good enough.
// Might want to do something a bit more complicated.
}
}
return false;
}
}