一段时间后限制节点访问

时间:2018-07-30 09:54:23

标签: php drupal drupal-7

我希望每天之后都能拥有某种类型的“拒绝访问”节点 如果用户角色是PRO,则每天只有2次可以编辑节点,而每次用户角色是ADVANCE,则每天只能编辑10次

达到此结果的最佳方法是什么?

function MY_MODULE_check_node_access($op, $node){
  global $user;
  // Note $op and $node are passed in default node_menu access arguments
  // Allow bypass by users with administer nodes permission
  if (($op == 'update') && (!user_access('administer nodes'))) {
  // Allow edit access to node author if within time limit
  if ($user->uid == $node->uid) {
  $limit = variable_get('node_edit_limit', (15 * 60));
  if ((REQUEST_TIME - $node->created) > $limit) {
    drupal_set_message(t('Edit time limit exceeded'));
    return FALSE;
  } else {
    return TRUE;
  }
}
}     
 // Fallback to regular node_access checks
  return node_access($op, $node);
  }

1 个答案:

答案 0 :(得分:1)

挂钩是hook_node_access https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_node_access/7.x 因此您的函数应命名为MY_MODULE_node_access($ op,$ node)

您也不必实现hook_menu_alter Drupal菜单项被缓存,因此没有意图尝试在每个请求上对其进行评估。 但是,仅实现hook_node_access就足够了 最后不要返回TRUE和FALSE,而是返回NODE_ACCESS_IGNORE和NODE_ACCESS_DENY。在上面的链接中查看hook_node_access的文档