Система доступа к нодам
Система доступа к нодам определяет кто и что может сделать с определёнными нодами.
Для определении прав доступа для ноды используется node_access()
. Эта функция сперва проверяет, имеет ли пользователь разрешение 'administer nodes'
. Такие пользователи имеют неограниченный доступ ко всем нодам. Затем вызывается хук hook_access()
в модуле этой ноды (по умолчанию — node_content_access()
), и возвращаемое значение, TRUE
или FALSE
, разрешит или запретит доступ. Например, это позволяет модулю blog всегда предоставлять доступ самому автору блога, а модулю book — всегда запрещать редактирование PHP страниц.
Если "нодовый" модуль не вмешивается в процесс ограничения доступа (возвращает NULL
в hook_access()
), тогда для этого используется таблица 'node_access'
. Все такие модули опрашиваются при помощи хука hook_node_grants()
и в результате собирается список идентификаторов разрешений пользователя (grant IDs). Этот список сравнивается с таблицей по соответствию grant ID. Если в таблице присутствует запись с идентифкатором ноды или идентификатор ноды в таблице равен 0, то доступ к ноде (или нодам) разрешается. Отметьте, что эта таблица, по существу, является списком разрешений; любой совпадающий строки достаточно, чтобы разрешить доступ к ноде.
В списках нод процесс проверки правил доступа несколько иной. hook_access()
не вызывается для каждой отдельной ноды по причине низкой производительности такого подхода, а также для нормальной работы пэйджера (листалки страниц). Поэтому, SQL-запрос, формирующий список, следует пропускать через функцию db_rewrite_sql()
, которая посредством вызовов хуков hook_db_rewrite_sql()
дополнит запрос проверками доступа.
Как писать свои собственные модули доступа — node_access_example.module.
Функции
Имя | Описание |
---|---|
hook_access developer/hooks/node.php | Определяет ограничения доступа. |
hook_node_access_records developer/hooks/core.php | Устанавливает разрешения для ноды быть записанной в базу данных. |
hook_node_grants developer/hooks/core.php | Информирует систему управления доступом к нодам о правах, которые пользователь имеет. |
node_access modules/node/node.module | Устанавливает, может ли текущий пользователь выполнять заданные действия над определённой нодой. |
node_access_acquire_grants modules/node/node.module | 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. |
node_access_grants modules/node/node.module | Fetch an array of permission IDs granted to the given user ID. |
node_access_needs_rebuild modules/node/node.module | Устанавливает/снимает флаг перестройки права доступа ноды или возвращает текущее значение флага. |
node_access_rebuild modules/node/node.module | Rebuild the node access database. This is occasionally needed by modules that make system-wide changes to access levels. |
node_access_view_all_nodes modules/node/node.module | Determine whether the user has a global viewing grant for all nodes. |
node_access_write_grants modules/node/node.module | 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... |
node_db_rewrite_sql modules/node/node.module | Реализация hook_db_rewrite_sql(). |
_node_access_join_sql modules/node/node.module | Generate an SQL join clause for use in fetching a node listing. |
_node_access_rebuild_batch_finished modules/node/node.module | Post-processing for node_access_rebuild_batch. |
_node_access_rebuild_batch_operation modules/node/node.module | Batch operation for node_access_rebuild_batch. |
_node_access_where_sql modules/node/node.module | Generate an SQL where clause for use in fetching a node listing. |