Перейти к основному содержанию
menu

Вы годами делали неправильные права доступа в Drupal (возможно). И исправить это довольно просто.


Разрешения Drupal - кошмар администратора. Страница настроек представляет собой пугающую стену неописуемых флажков с перекрывающимся значением и множеством дубликатов. Это затрудняет поиск ошибок и управление разрешениями. Хуже всего то, что этот пользовательский опыт создает угрозу безопасности. Просто слишком заманчиво прокручивать и ставить флажок, не задумываясь о последствиях.

Разрешения, как правило, являются запоздалой мыслью, поэтому история с разрешениями часто выглядит так: есть разработчики, и мы получаем роль «Администратор». Возможно, один или два технических специалиста на стороне клиента тоже получат это. Менеджер проекта также может получить роль администратора. Затем есть все остальные, и они получают роль «Редактор контента». Затем, когда начинается окончательный контроль качества или, что еще хуже, через несколько недель после запуска, становится ясно, что руководителю отдела в офисе клиента требуется немного больше доступа. Мы не хотим перегружать их ролью «Администратор», поэтому мы создаем роль «Администратор контента». Этот человек может удалять и редактировать посты других, они могут даже изменить некоторые конфигурации. Все вроде нормально. Но время идет, и однажды клиент нанимает стажера. Они, конечно, могут дать ему те же права, что и у редакторов. Мы знаем, что делать, мы просто создадим новую роль для стажера. Теперь стажер может делать практически все, что может делать «редактор содержимого», за исключением 5 или 6 флажков, поэтому вы просто прокручиваете и нажимаете, дублируя все разрешения в новую роль. Проходит больше времени, и этот процесс повторяется.

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

 

Исправление


Во-первых, усвойте это: роли Drupal не являются названиями должностей, и вы не должны относиться к ним как к таковым. Иными словами, «Редактор контента» - это не человек, это ответственность.

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

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

Вместо этого мы должны спросить себя: «Каковы обязанности каждого из этих пользователей?»

Первое довольно тривиально: «Читатель» читает контент и, возможно, также может комментировать этот контент. Сразу же мы можем извлечь две роли Drupal из этой: роль Viewer и Commentor . Эти роли не должны иметь никаких других разрешений, кроме тех, которые позволяют им делать то, что подразумевают их имена. То есть скажем, роль читателя должна иметь разрешение: «View опубликовал содержание» и Commentor роль должны иметь права доступа: «Просмотр комментариев», «Редактировать свои комментарии», и , наконец, «Комментарии к сообщению». Ни больше ни меньше.

Просматривая разрешения для роли «Комментатор», вы, возможно, заметили «Разраешить комментарии без одобрения» и «Администрирование комментариев и настройки комментариев». Мы не дали их Комментатору , однако, они должны быть в роли. Давайте назовем это модератором комментариев .

Легко представить это упражнение утомительным, особенно если мы знаем, что все наши редакторы всегда будут модераторами комментариев . Не проще ли назначить эти разрешения для роли редактора ? Вероятно, в этот момент ответ будет «да», но через год, когда все будет по-другому (как это всегда бывает с программным обеспечением), вы захотите, чтобы вы нашли время, чтобы сделать все более правильным. Намного проще назначить роль « Модератор комментариев» для интерна, чем дублировать разрешения, необходимые для этой роли, снова и снова для всех ролей, которым требуются те же разрешения.

Продолжая упражнение, если мы посмотрим на тип пользователя Guest Writer , мы сможем получить еще несколько ролей, таких как Blog Writer и Article Writer (делать ли особые роли для типа контента, решать вам).

Наконец, мы можем взглянуть на роль редактора , отметив, что нам не нужно давать этому пользователю возможность создавать контент или «редактировать собственный контент». Это потому, что любой Редактор, которому мы назначаем эту роль, вероятно, также получит роль Автор блога . Мы должны избегать дублирования этих разрешений. Роль, в которой мы действительно нуждаемся, - это роль редактора контента (она вам наверняка знакомо, она поставляется из коробки с Drupal). Эта роль может быть разрешено редактировать и удалять любой контент. Опять не больше, не меньше.

Итак, какой смысл всего этого? На самом деле, это все равно что писать хорошую документацию или чистый, хорошо документированный код. Это облегчает жизнь вам и любому другому в будущем. По мере того, как люди приходят и уходят в офис вашего клиента, и их должности меняются, создание ролей, подходящих для этих только что созданных должностных инструкций, будет простым и разумным. Просто составив позиции из обязанностей (читать ролей ), которые у вас уже есть, вы можете создавать различные и уникальные наборы разрешений для любого пользователя, когда возникнет такая необходимость.

Что дальше?
Назначение многих ролей каждому новому пользователю вручную - не очень приятное занятие. Есть модули, которые могут помочь с этим, как Auto Assign Role .

Наконец, ничего готового показать пока не могу, но я работаю над простым модулем, который добавит некоторый уровень абстракции для ролей Drupal. Это позволит вам создавать именованные группы ролей и затем назначать эти группы ролей пользователям, а не назначать все их роли по отдельности. Этот дополнительный уровень вернул бы нам удобство просмотра названий должностей пользователей и установки только одного флажка для этого, сохраняя при этом роли, основанные на обязанностях. Это должно означать, что он будет отлично работать с core и contrib. Если это уже существует, обязательно дайте мне знать! (Нет, OG не в счет).

assistant Теги

keyboard_arrow_up