Всем привет!
Есть сайт кадрового агентства. В нем необходимо реализовать такую функцию: должны быть две новые роли Руководство и Сотрудники. Причем, Руководство должно иметь права на редактирование страниц определенных типов, например, Page, а также Вакансии и Резюме.
Юзеры, входящие в роль Сотрудники должны редактировать только Вакансии и Резюме (при том желательно только свои). Плюс теже документы, но созданные Гостем. Документы, добавленные Гостем по умолчанию не публикуются. Публиковать должны или Сотрудники или Руководство. И не должны иметь прав на редактирование Page.
Вот что делаю.
Захожу в admin/user/permissions
В рубрике Node
Напротив создание Вакансий и Резюме ставлю галочки зарегистрированным пользователям.
Напротив редактирование/удаление только своих вакансий (резюме) - Сотрудникам.
Напротив редактирование/удаление всех вакансий (резюме) - Руководству.
Напротив редактирование Page - Руководству.
Также ставлю галочку для зарегистрированных пользователей напротив Управление материалами.
Но получается облом. Тогда все могут редактировать все, что угодно. Пробую ставить эту галочку только для Руководства. Тогда Юзеры этой роли получают нужные права. А Сотрудники - могут редактировать только свои документы, но не имеют возможности управлять их публикацией.
Вот что еще забавно. Если убираю абсолютно все галочки напротив edit any (или own) page content, то всеравно под любым юзером из Сотрудников или Руководства можно изменить эту страницу. Но стоит лишь поставить галочку напротив Управление материалами только Руководству, как все становится почти хорошо. Только вот Сотрудникам не айс, не могут они публиковать самостоятельно.
Нужно как-то реализовать управление материалами, чтоб Сотрудники публиковать вакансии и резюме могли самостоятельно.
Плюс пока не догнал что делать с Гостем, чтобы созданные им вакансии и резюме могли редактировать Сотрудники.
Комментарии
Итак, большую часть вопросов решил с помощью модуля Override Node Options. Отличная штука. И не нужно никому давать прав на Управление материалами.
Остался один единственный вопрос: как сделать, чтобы Сотрудники могли редактировать только свои материалы и материалы, созданные Гостем. Причем, чтобы автор материала менялся на того, кто первый его редактирует.
«Причем, чтобы автор материала менялся на того, кто первый его редактирует.»
Здесь form_alter'ом добавь свою validate функцию к форме редактирования нужных нод
<?php
function module_form_alter(&$form, $form_state, $form_id) {
if ((
$form_id == 'TYPE1_node_form') or ($form_id == 'TYPE2_node_form') or ($form_id == 'TYPE3_node_form')) {$form['#validate'][] = 'module_last_validate';
}
}
?>
и уже в этой функции сам перезаписывай значение поля "автор" на $user->name. Предварительно не забудь сделать global $user в функции валидации.
Почему именно валидация? Потому что так твои изменения встанут ровно после всех других валидаций и до сабмита.
Не знаю, получилось проще с модулем https://drupal.org/project/nodeaccess.
Выставить в настройках отображение для видов материала таблицы разрешений - и все.