Я почти уверен, что понимаю настройки ролей и возможностей в WordPress: детализированные возможности, сгруппированные в роли, которые можно назначать пользователям. Код должен проверять гранулярные возможности, а не роли (поскольку возможности для определенных ролей могут изменяться). Роли не обязательно являются иерархическими (хотя роли по умолчанию).
Есть ли способ назначить несколько ролей пользователям? В качестве альтернативы, имея несколько групп возможностей и связывая одну или несколько групп с пользователем? Как работает мой сайт, существует ряд очевидных обязанностей: обновлять веб-страницы, модерировать форумы, обновлять календарь событий и так далее. Каждая ответственность имеет группу возможностей, которые необходимы для выполнения связанных с ней задач. Я бы хотел, чтобы пользователь мог выполнять одну или несколько обязанностей. Таким образом, пользователь A может обновлять веб-страницы и календарь событий, но не модерировать форумы (не достаточно тактично), но пользователь B может модерировать форумы, обновлять календарь событий, но не допускается рядом с веб-страницами.
Если не считать определение роли для каждой возможной комбинации обязанностей, есть ли способ сделать это?
источник
Ответы:
Отсутствие множественных ролей раздражало меня долгое время, так как базовый класс WP_User поддерживает несколько ролей. Я даже подумывал о поиске альтернативного программного решения. @lpryor - после прочтения вашего поста у меня появилась мотивация реализовать его самостоятельно.
Это заняло удивительно короткое количество строк, хотя мне пришлось взломать файл users.php, так как я был слишком ленив, чтобы создать отдельный плагин, чтобы сделать это для меня. Очевидно, что это неправильный способ сделать это, поэтому, если я буду достаточно мотивирован в будущем, я могу попытаться сделать это правильно.
Если вас не волнует возможность обновления до последней версии Wordpress (что вам и нужно) - вы можете реализовать несколько ролей с помощью фрагментов кода ниже. Пожалуйста, имейте в виду, что я не эксперт по WordPress. Я просто открыл соответствующие файлы и внес изменения, не пытаясь понять все последствия того, что я делал. Код кажется мне разумным, но я бы не стал доверять ему свою жизнь.
(Я использую 3.2, поэтому ваши номера строк могут отличаться). В class-wp-users-list-table.php непосредственно перед строкой 150 добавьте что-то вроде следующего:
затем измените функцию current_account, чтобы она выглядела примерно так
}
Сейчас в users.php закомментируйте строки 71-76
Замените set_role в строке 83 на add_role
В строке 92 добавьте следующее (Это просто слегка отредактированное копирование и вставка из действия по продвижению - я не проверил, чтобы возможность promo_user подходила для удаления ролей)
В строке 370 добавить следующее
источник
Плагин User Role Editor обрабатывает несколько ролей для пользователя.
После установки «Пользователи» под каждым пользователем выбирается «Возможности». URE рассматривает первую роль WP как «основную роль» и позволяет добавлять «другие роли».
источник
Я использую плагин Members вместе с пользовательскими возможностями.
Вы не можете назначить несколько ролей одному человеку, но вы можете создать любые роли и указать, какие функции имеет эта роль.
В шаблонах вы можете использовать что-то вроде current_user_can () .
источник