У меня тоже была проблема, и я решил ее с помощью Zend Framework . Вам не обязательно использовать саму полную платформу Framework, но вы можете полагаться на Zend_Acl - часть авторизации платформы.
Вы в основном определяете иерархию ролей и разрешенные / запрещенные действия для каждой роли, как вы, возможно, уже знаете из других структур:
$acl = new Zend_Acl();
// two roles
$acl->addRole(new Zend_Acl_Role('moderator'))
->addRole(new Zend_Acl_Role('member'));
// a Resource is something you can map actions to
$acl->addResource(new Zend_Acl_Resource('database'))
->addResource(new Zend_Acl_Resource('database'), 'update');
// now for the acls itself
$acl->allow('moderator', 'database', 'update')
->deny('member', 'database', 'update');
Если вы знаете, хотите показать или скрыть действие в зависимости от роли, это так же просто, как использовать isAllowed()
-метод в вашем коде:
// show button?
if ($acl->isAllowed($user->role, 'database', 'update')
echo '<input type="button" value="update" />';
else
echo '<input type="button" value="update" disabled="disabled" />';
Страница справочника позволяет лучше понять Zend_ACL () и Zend_Auth () - последняя обеспечивает аутентификацию. Если вы также хотите еще больше автоматизировать создание пунктов меню в соответствии с ролями, проверьте также Zend_Navigation .