首页 > 代码库 > drupal自定义node权限

drupal自定义node权限

使用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函数实现,

剩下的你就到后台图像化界面配置就好了。