Aviso, muito Zend Framework pela frente!
Você pode lidar facilmente com 1. e 2. com Zend_Acl e Zend_Navigation .
Para o número 3, você terá que consultar o objeto ACL em seu modelo e fazer muitas coisas manualmente. Você também pode utilizar o Zend Framework para os formulários e incluir validadores de elementos de formulário específicos, dependendo da permissão de função do usuário.
EDITAR:
Se você não quiser seguir o caminho da ZF, pode pelo menos dar uma olhada em como a ACL é tratada na ZF.