Предоставление доступа пользователю

0

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

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

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

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

  • 0
    Проще говоря: означает ли это, что вам нужно создавать группы пользователей?
  • 0
    Это действительно MySQL специфично? Большинство веб-приложений реализуют «учетные записи» на уровне приложений и используют базу данных только в качестве хранилища данных. Кроме того, вы, кажется, используете user / admin несколькими способами в своем вопросе. Некоторые подробности были бы хорошими, с лучшими конкретными примерами. Но по сути вы, кажется, говорите о транзитивных разрешениях
Показать ещё 1 комментарий
Теги:
zend-framework

1 ответ

1
Лучший ответ

Я думаю, что попытка связать разрешения с аккаунтами - ваша проблема, вам нужно добавить второй "слой". В качестве примера можно использовать Google Analytics:

Скажем, Joe Bloggs хочет использовать 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 означает, что роль должна наследовать все разрешения от другой указанной роли. Итак, то, что я сделал выше, определяет две роли: guest и admin; и указанный администратор должен наследовать все разрешения, предоставленные гостем.

Затем у вас есть свои "ресурсы", к которым можно получить доступ. Поэтому мы будем определять один для отчетов и один для управления пользователями:

$acl->add(new Zend_Acl_Resource('reports'));
$acl->add(new Zend_Acl_Resource('users'));

мы предоставим доступ к отчетам "guest" и "admin" для пользователей:

$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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню