使用HOOK_node_access_records 和 HOOK_node_grants(图形化组合(个人理解没有权威性,仅供参考)) 这两个钩子 代替 HOOK_node_access
1/ 首先介绍下HOOK_node_access 他是用写代码的方式来判断用户有没有权限来访问,编辑,删除一个node的权限,如下:
function modulename_node_access($node, $op, $account) {//这里根据你的条件做以下返回return NODE_ACCESS_IGNORE;<pre name="code" class="php"> return NODE_ACCESS_DENY;return NODE_ACCESS_ALLOW;}
2/ 使用HOOK_node_access_records 和 HOOK_node_grants这个图形化组合
首先声明 HOOK_node_grants 这个钩子会在node的以下3种情况中被调用,并且向node_access表中添加相应的记录, 如下:
3种情况分别是: 这三个函数都在node.module里面
node_save
node_access_rebuild 这里包括一个batch(_node_access_rebuild_batch_operation)
function modulename_node_access_records($node) {$grants[] = array('realm' => 'node_access_custom_edit','gid' => $gid,'grant_view' => 1,'grant_update' => 1,'grant_delete' => 1,'priority' => 0,);</pre><p></p><p></p><pre name="code" class="php"> $grants[] = array('realm' => 'node_access_custom_author','gid' => $node->uid,'grant_view' => 1,'grant_update' => 1,'grant_delete' => 1,'priority' => 0,);return $grants;}
其次权限比较:
在HOOK_node_access 中 使用这个函数
module_implements(‘node_grants‘)
将所有node_grants实现, 如下:
function
node_access_example_node_grants($account, $op) {$grants = array();
// First grant a grant to the author for own content.
// Do not grant to anonymous user else all anonymous users would be author.
if ($account->uid) {
$grants[‘node_access_example_author‘] = array($account->uid);
}
// Then, if "access any private content" is allowed to the account,
// grant view, update, or delete as necessary.
if ($op == ‘view‘ && user_access(‘access any private content‘, $account)) {
$grants[‘node_access_example_view‘] = array(NODE_ACCESS_EXAMPLE_GRANT_ALL);
}
if (($op == ‘update‘ || $op == ‘delete‘) && user_access(‘edit any private content‘, $account)) {
$grants[‘node_access_example_edit‘] = array(NODE_ACCESS_EXAMPLE_GRANT_ALL);
}
return $grants;
}
进行real gid 为一组 多个 取or的条件进行查询 详情请看node_access函数实现,
剩下的你就到后台图像化界面配置就好了。
drupal自定义node权限