我希望每天之后都能拥有某种类型的“拒绝访问”节点
如果用户角色是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);
}
答案 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的文档