Система доступа к нодам определяет кто и что может сделать с определёнными нодами.
Для определении прав доступа для ноды используется
. Эта функция сперва проверяет, имеет ли пользователь разрешение 'administer nodes'
. Такие пользователи имеют неограниченный доступ ко всем нодам. Затем вызывается хук
в модуле этой ноды (по умолчанию —
), и возвращаемое значение, TRUE
или FALSE
, разрешит или запретит доступ. Например, это позволяет модулю blog всегда предоставлять доступ самому автору блога, а модулю book — всегда запрещать редактирование PHP страниц.
Если «нодовый» модуль не вмешивается в процесс ограничения доступа (возвращает NULL
в
), тогда для этого используется таблица 'node_access'
. Все такие модули опрашиваются при помощи хука
и в результате собирается список идентификаторов разрешений пользователя (grant IDs). Этот список сравнивается с таблицей по соответствию grant ID. Если в таблице присутствует запись с идентифкатором ноды или идентификатор ноды в таблице равен 0, то доступ к ноде (или нодам) разрешается. Отметьте, что эта таблица, по существу, является списком разрешений; любой совпадающий строки достаточно, чтобы разрешить доступ к ноде.
В списках нод процесс проверки правил доступа несколько иной.
не вызывается для каждой отдельной ноды по причине низкой производительности такого подхода, а также для нормальной работы пэйджера (листалки страниц). Поэтому, SQL-запрос, формирующий список, следует пропускать через функцию
, которая посредством вызовов хуков
дополнит запрос проверками доступа.
Как писать свои собственные модули доступа —
Функции
Имя | Описание |
---|---|
developer/hooks/ |
Определяет ограничения доступа. |
developer/hooks/ |
Устанавливает разрешения для ноды быть записанной в базу данных. |
developer/hooks/ |
Информирует систему управления доступом к нодам о правах, которые пользователь имеет. |
modules/node/ |
Устанавливает, может ли текущий пользователь выполнять заданные действия над определённой нодой. |
modules/node/ |
This function will call module invoke to get a list of grants and then write them to the database. It is called at node save, and should be called by modules whenever something other than a node_save causes the permissions on a node to change. |
modules/node/ |
Fetch an array of permission IDs granted to the given user ID. |
modules/node/ |
Устанавливает/снимает флаг перестройки права доступа ноды или возвращает текущее значение флага. |
modules/node/ |
Rebuild the node access database. This is occasionally needed by modules that make system-wide changes to access levels. |
modules/node/ |
Determine whether the user has a global viewing grant for all nodes. |
modules/node/ |
This function will write a list of grants to the database, deleting any pre-existing grants. If a realm is provided, it will only delete grants from that realm, but it will always delete a grant from the ‘all’ realm. Modules which utilize… |
modules/node/ |
Реализация |
modules/node/ |
Generate an SQL join clause for use in fetching a node listing. |
modules/node/ |
Post-processing for node_access_rebuild_batch. |
modules/node/ |
Batch operation for node_access_rebuild_batch. |
modules/node/ |
Generate an SQL where clause for use in fetching a node listing. |
Источник: