Я думаю, что попытка привязать разрешения к учетным записям - это ваша проблема, вам нужно добавить второй «слой».Давайте в качестве примера остановимся на Google Analytics:
Допустим, Джо Блоггс хочет использовать Google Analytics.Сначала он должен создать учетную запись Google (при условии, что у него его еще нет).Затем он создает учетную запись Google Analytics для своего сайта .Скажем, Джо хочет дать доступ Джейн Смит, предположим, у нее уже есть аккаунт Google.Чтобы дать ей доступ, все, что он делает, - это дает ей учетной записи Google доступ к своему сайту , он не дает ей доступа к своей учетной записи Google.
Zend_Acl основан на ролях, поэтому давайте попробуем применить ZFКонцепции к этому примеру.Экраны управления пользователями в GA позволяют предоставить пользователям доступ «Просмотр только отчетов» или «Администратор учетной записи».Таким образом, вы должны определить роль в Zend_Acl для каждого из этих уровней доступа:
$acl = new Zend_Acl();
$acl->addRole(new Zend_Acl_Role('guest'));
$acl->addRole(new Zend_Acl_Role('admin'), 'guest');
второй параметр в addRole означает, что роль должна наследовать все разрешения от другой указанной роли.Итак, что я сделал выше, определил две роли: гость и администратор;и сказал, что администратор должен унаследовать все разрешения, которые имеет гость.
Затем у вас есть «ресурсы», к которым можно получить доступ.Поэтому мы определим один для отчетов и один для управления пользователями:
$acl->add(new Zend_Acl_Resource('reports'));
$acl->add(new Zend_Acl_Resource('users'));
затем мы предоставим «гостевой» доступ к отчетам и «административный» доступ пользователям:
$acl->allow('guest', 'reports');
$acl->allow('admin', 'users');
затем в соответствующих контроллерах (или плагине, или где-либо еще) вы можете проверить разрешения:
public function reportsAction()
{
[...]
// assume $role contains the role of the currently logged in user
if (!$acl->isAllowed($role, 'reports')) {
// show a permissions error
}
}
public function usersAction()
{
[...]
if (!$acl->isAllowed($role, 'users')) {
// permissions error
}
}
Для сохранения этого в MySQL вам просто нужна таблица поиска, которая связывает пользователей, сайты (в этом примере) и роли:
userID | siteID | role
1 1 admin
2 1 guest