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

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

drupal自定义node权限

时间: 2024-10-25 19:37:14

drupal自定义node权限的相关文章

如何发布一个自定义Node.js模块到NPM(详细步骤)

咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着,以极少的文字说明以及极少的代码书写为原则来给大家演示! 文章中上传的模块不具备任何意义! 一.封装node.js模块时的必须项 1.创建package.json 每一个完整封装的node模块,必须含有一个参数明确的package.json文件! 以下为package.json的最精简配置: { "n

ClickOnce部署(5):自定义安全权限

今天我们来探讨一下在ClickOnce部署中如何严格控制应用程序的权限. 演示应用 为了在下文中能更好地演示,我们先要做一个测试项目.也为了显得简单易懂,我使用最常用且最常见的WinForm项目,这是地球上最丰富的物种. 咱们做一个MD5的计算程序,这个应该够简单了吧?程序的功能是浏览打开一个文件,然后计算它的MD5,最后以字符串的形式输出. 界面大致这样: 其中用来输入文件名的文本框叫txtInput,用来显示计算结果的文本框叫txtOutput,为了方便输入文件名,我们在输入文本框的右侧放一

【Android进阶篇】自定义应用权限

在Android里,不是只有网络.信息.蓝牙等会受到保护,我们需要申请权限才能访问,我们自己编写的应用也可以受到Android系统的保护,让其他应用也需要先获取权限才能访问.下面介绍一下如何给应用的Activity自定义权限. 我们会通过三步来实现: 首先,创建两个Android项目,第二个访问第一个的Activity: 然后,给第一个应用的Activity的设置权限,再让第二个访问,看会发生什么 最后,是第二个应用获取了权限后再访问第一个应用的Activity. 实例步骤: 1. 创建Andr

java自定义标签 权限

<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://

django web 自定义通用权限控制

需求:web系统有包含以下5个url,分别对于不同资源: 1.stu/add_stu/ 2.stu/upload_homework/ 3.stu/query_homework/ 4.stu/add_record/ -------------------------------------------------------------------------------------------------------- 学生可以访问:2,3 老师可以访问:1,4 可以通过基于角色对用户权限进行控

drupal 自定义登录&amp;找回密码页面,注意事项

1.登录页面的 $form['form_id'] 和 $form['form_build_id'],是这样输出的: <?php print drupal_render($form['form_id']);?> <?php print drupal_render($form['form_build_id']);?> 2.密码找回页面是这样的 <?php print render($form['form_id']);?> <?php print render($for

drupal 8 ——自定义权限

在项目开发里面,我遇到了这么一个需求,就是对于node的title字段,编辑内容的角色不允许对title进行编辑.title字段是创建内容类型时自动生成的字段,不能在drupal8后台直接配置权限,所以我需要用代码自定义一个权限. 1.在/modules/custom下自定义一个模块,我的模块名为one_node_title_permission 2.新建三个文件,分别为one_node_title_permission.info.yml,one_node_title_permission.mo

android 自定义权限

理解android的自定义权限,下面介绍一段代码.包括两个安卓项目,project 2试图调用project 1中的特权活动PrivActivity. android project 1 : application name: Custom Permission pacakage name: com.cust.perm 1) 特权活动 PrivActivity.java package com.cust.perm; import android.app.Activity; import andr

MVC 自定义AuthorizeAttribute实现权限管理

[Authorize] public ActionResult TestAuthorize() { return View(); } [Authorize(Users="test1,test2")] public ActionResult TestAuthorize() { return View(); } [Authorize(Roles="Admin")] public ActionResult TestAuthorize() { return View();