You are here

修改节点编辑表单元素的权限回调函数

g089h515r806 的头像
Submitted by g089h515r806 on 星期一, 2010-05-24 14:41

帮学员写的一个实例函数,主要作用是用来控制node/nid/edit页面的访问权限的,因为现有的访问权限,满足不了学员的需求,而且没有直接的模块可用,

通过覆写菜单,实现自己的权限控制,在自己的权限控制函数中,实现自己的逻辑。

Drupal的90%以上的功能,都是可以替换掉的,而且不用修改源代码,这就是Drupal的灵活性,在很多其它的CMS中,这是很难实现的。

function mymodule_menu_alter(&$items){
 //修改这个页面回调函数的访问权限控制汉书
 $items['node/%node/edit']['access callback'] = 'mymodule_nodeaccess';
}
function mymodule_nodeaccess($op, $node, $account = NULL){
 global $user;
//在原来的控制函数user_access前面加上了判断,如果任务完成了,并且当前用户不具有'站点管理员'角色,那么就不能访问
 /*
 if($op =='update' && $node->field_task_over[0]['value'] =='yes' && !in_array('站点管理员',$user->roles)){
  return FALSE;
 }else
 */

//这里是用户的逻辑
 if($node->type=='task'){
  if(in_array('站点管理员',$user->roles)){
   return TRUE;
  }elseif($op =='update' && $node->field_task_over[0]['value'] =='no' && $user->uid == $node->uid && $user->uid != 0){
   return TRUE;
  }else{
   return FALSE;
  }
 }else{

//这里是系统默认的逻辑,执行完前面的,起到兜底的作用。
  return node_access('update',$node);
 }

}

Drupal版本: