Предоставление доступа пользователю - PullRequest
0 голосов
/ 13 сентября 2010

Мы разрабатываем веб-приложение с использованием инфраструктуры Zend и Mysql.

В настоящее время учетные записи уникальны по адресу электронной почты. Мы хотим иметь возможность разрешить администратору учетной записи предоставить доступ администратору другой учетной записи. Этот человек будет «пользователем» связанной учетной записи. Затем владелец учетной записи будет входить в свою учетную запись администратора и затем выбирать, к какой связанной учетной записи он хочет получить доступ.

Обратите внимание: доступ должен быть только в одну сторону. Учетная запись 1, которая предоставляет доступ к Учетной записи 2, не должна иметь доступ к учетной записи 2. Только учетная запись 2 может получить доступ к учетной записи 1. Если учетная запись 1 хочет получить доступ к учетной записи 2, учетная запись 2 должна будет предоставить доступ к учетной записи 1.

Каков наилучший способ добиться этого?

1 Ответ

1 голос
/ 14 сентября 2010

Я думаю, что попытка привязать разрешения к учетным записям - это ваша проблема, вам нужно добавить второй «слой».Давайте в качестве примера остановимся на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...