Error message
You are browsing documentation for drupal 7.x, which is not supported anymore. Read the updated version of this page for drupal 11.x (the latest version).function node_access_rebuild
Same name and namespace in other branches
- 11.x core/modules/node/node.module \node_access_rebuild()
- 10 core/modules/node/node.module \node_access_rebuild()
- 9 core/modules/node/node.module \node_access_rebuild()
- 8.9.x core/modules/node/node.module \node_access_rebuild()
Rebuilds the node access database.
This is occasionally needed by modules that make system-wide changes to access levels. When the rebuild is required by an admin-triggered action (e.g module settings form), calling node_access_needs_rebuild(TRUE) instead of node_access_rebuild() lets the user perform his changes and actually rebuild only once he is done.
Note: As of Drupal 6, node access modules are not required to (and actually should not) call node_access_rebuild() in hook_enable/disable anymore.
Parameters
$batch_mode: Set to TRUE to process in 'batch' mode, spawning processing over several HTTP requests (thus avoiding the risk of PHP timeout if the site has a large number of nodes). hook_update_N and any form submit handler are safe contexts to use the 'batch mode'. Less decidable cases (such as calls from hook_user, hook_taxonomy, etc...) might consider using the non-batch mode.
See also
Related topics
- Node access rights
- The node access system determines who can do what to which nodes.
12 calls to node_access_rebuild()
- BookTestCase::setUp in modules/
book/ book.test - Sets up a Drupal site for running functional and integration tests.
- CommentNodeAccessTest::setUp in modules/
comment/ comment.test - Sets up a Drupal site for running functional and integration tests.
- FilePrivateTestCase::setUp in modules/
file/ tests/ file.test - Sets up a Drupal site for running functional and integration tests.
- module_disable in includes/
module.inc - Disables a given set of modules.
- NodeAccessBaseTableTestCase::setUp in modules/
node/ node.test - Sets up a Drupal site for running functional and integration tests.
File
-
modules/
node/ node.module, line 3625
Code
function node_access_rebuild ($batch_mode = FALSE) {
db_delete ('node_access')->execute ();
// Only recalculate if the site is using a node_access module.
if (count (module_implements ('node_grants'))) {
if ($batch_mode) {
$batch = array(
'title' => t ('Rebuilding content access permissions'),
'operations' => array(
array(
'_node_access_rebuild_batch_operation',
array(),
),
),
'finished' => '_node_access_rebuild_batch_finished',
);
batch_set ($batch);
}
else {
// Try to allocate enough time to rebuild node grants
drupal_set_time_limit (240);
// Rebuild newest nodes first so that recent content becomes available quickly.
$nids = db_query ("SELECT nid FROM {node} ORDER BY nid DESC")->fetchCol ();
foreach ($nids as $nid) {
$node = node_load ($nid, NULL, TRUE);
// To preserve database integrity, only acquire grants if the node
// loads successfully.
if (!empty($node)) {
node_access_acquire_grants ($node);
}
}
}
}
else {
// Not using any node_access modules. Add the default grant.
db_insert ('node_access')->fields (array(
'nid' => 0,
'realm' => 'all',
'gid' => 0,
'grant_view' => 1,
'grant_update' => 0,
'grant_delete' => 0,
))
->execute ();
}
if (!isset($batch)) {
drupal_set_message (t ('Content permissions have been rebuilt.'));
node_access_needs_rebuild (FALSE);
cache_clear_all ();
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.