Ограничить RoleAssign

Главные вкладки

Аватар пользователя teddar teddar 25 октября 2011 в 22:39

Первый сайт на Drupal. Использую RoleAssign 7.x-1.0-beta2. Юзер (не админ) с соотв. правами должен иметь возможность полного доступа к аккаунтам юзеров, редактировать, блокировать. Это работает. Выяснилось, что он может править некоторые настройки аккаунта Админа. Удалось преодолеть, сделав всю форму закрытой от изменений. Но обнаружилась еще одна проблема. Этот юзер имеет доступ к admin/config/people/accounts, а это абсолютно лишнее.
Как его ограничить в этом?

Комментарии

Аватар пользователя teddar teddar 26 октября 2011 в 6:09

У организации несколько сайтов в разных местах с разными юзерами. Им надо, чтобы был один главный админ на все сайты. Но чтобы на каждом был урезанный админ, который может блокировать, изменять юзеров, давать им роли в пределах своего сайта. Но он не должен иметь возможность изменять аккаунт главного админа и установленные главным админом всех сайтов настройки пользовательских аккаунтов в admin/config/people/accounts. Осталось блокировать доступ к admin/config/people/accounts человеку, имеющему права на просмотр списка юзеров, их блокировку, редакцию, назначение прав (ролей) на данном сайте. Он не должен иметь возможности изменять настройки способа авторизации и пр.,что есть в admin/config/people/accounts. Я сначала не заметил, что этот доступ у него есть.

Аватар пользователя mak-vardugin mak-vardugin 26 октября 2011 в 13:05

ахереть тоталитаризм какой-то, если сделано на мультисайтинге то да задачка не простая, вам придется поковырять d.org

Аватар пользователя teddar teddar 27 октября 2011 в 7:13

Да, мультисайтинг.
Нашел такое решение.
Чтобы юзер, которому RoleAssign позволяет управлять пользователями, не мог править аккаунт админа, в modules/roleassign/roleassign.admin.inc заменил это:

if (user_access('administer permissions', $user)) {
drupal_set_message(t('Some of the fields on this form are locked for this user.'), 'warning');
$form['account']['name']['#disabled'] = TRUE;
$form['account']['mail']['#disabled'] = TRUE;
$form['account']['pass']['#disabled'] = TRUE;
}

на это:

if (user_access('administer permissions', $user)) {
drupal_set_message(t('Some of the fields on this form are locked for this user.'), 'warning');
$form['account']['name']['#disabled'] = TRUE;
$form['account']['mail']['#disabled'] = TRUE;
$form['account']['pass']['#disabled'] = TRUE;
$form['account']['status']['#disabled'] = TRUE;
$form['account']['#disabled'] = TRUE;
$form['#disabled'] = TRUE;
}

А чтобы закрыть доступ роли к конкретной странице, можно использовать path_access. Однако после его установки, пропала закладка "Права доступа" у админа. Проблема описана здесь: https://drupal.org/node/1239550
Предложенный метод решения мне не помог. Решил помещением "Права доступа" на оверлей.

Если что-то не так, прошу поправить.

---
По первому пункту можно еще запретить доступ по URL, используя path_access, для надежности.