帮学员写的一个实例函数,主要作用是用来控制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);
}
}