esa es prisamente la idea del ACL (acces control list)
Código PHP:
class Zend_View_Helper_LoggedInAs extends Zend_View_Helper_Abstract
{
public function loggedInAs ()
{
$this->_acl = new Library_MyApp_Acl();
$role= Zend_Auth::getInstance()->getIdentity()->role;
$navContainerConfig = new Zend_Config_Xml('Application/Configs/navigation.xml', 'nav');
$navContainer = new Zend_Navigation($navContainerConfig);
$this->view->navigation($navContainer);
return $this->view->navigation()
->setAcl($this->_acl)
->setRole($role) //aqui le pasas el rol y solo mostrara los permisos a los qe tiene derecho.
;
}
}
yo uso para la asignacion de permisos un .ini, pero bien puedes usar xml.
un ejemplo seria.
Código PHP:
[roles]
Alumno = null
;maestro hereda de alumno, dado que tienen todos los
accesos de alumno mas los propios
Maestro = "Alumno"
;supervisor al heredar de maestro tiene todas las funciones de alumno
;y de maestro
Supervisor = "Maestro"
;por lo regular el admin no hereda de nadie
admin = null
[resources]
;estos son tus controladores y si tu aplicacion es modular
; el modulo va del lado derecho,sino puede dejar "Default"
Auth = "Default"
index = "Default"
Site = "Default"
error = "Default"
Users = "Admin"
;las acciones correspondientes a cada controlador
[subresources]
;AUTH
login = "Auth"
logout = "Auth"
;SITE
Materias = "Site"
AltaAlumnos = "Site"
AltaMaestros = "Site"
ALtaMaterias = "Site"
; aqui van los permisos a los que se asigna a cada role
[Alumno]
Materias.allow =null
[Maestro]
AltaAlumnos.allow =null
[Supervisor]
ALtaMaterias.allow =null
AltaMaestros.allow =null
;como supervisor hereda de maestro el supervisor por default podria dar de alta alumnos
;pero digamos que eso no es lo que queremos, entonces podemos negarle ese recurso en especifico
AltaAlumnos.denied = null
[admin];de esta forma admin aunque no hereda de nadie, tiene derecho a todos
;los recursos.
allow = null
espero te sea de ayuda, es solo un primer acercamiento, ademas de que lo genere al vuelo, asi que no creo que funcione de entrada, pero repito es solo para darte una idea de como funciona.
saludos.