使用CCK在Drupal中按节点创建日期访问

时间:2010-09-16 18:04:51

标签: drupal cck drupal-permissions

我正在寻找一种特定的行为,根据节点的创建日期时间授予查看一个或多个cck字段的权限。

特别需要:

授予角色A:完全访问所有CCK(新旧) 授予角色B:访问所有CCK,但只能访问节点OLDER中存在的CCK而不是1年 匿名用户:无权访问CCK字段

我怎样才能得到这个结果?

4 个答案:

答案 0 :(得分:2)

您希望控制字段级别的权限,因此我会避免使用hook_nodeapi()而是建议您使用hook_field_access(或使用hook_nodeapihook_field_access()的组合

伪代码中的

示例:

mymodule_hook_field_access($op, $field, $account = NULL, $node = NULL){

    if($field['field_name'] == 'field_xyz'){
        switch($op){
            case 'view':
                if($node->created was less than a year ago && $account role is A){
                   return FALSE;
                }

                if($node->created was less than a year ago && $account role is B){
                 return TRUE;
                }

                return FALSE;
                break;
            case 'edit':
                ...
                ...
        }    
    }

    return TRUE;
}

看看被调用的钩子 http://api.lullabot.com/content_access

来自CCK模块的Drupal 6中提供了

hook_field_access()。在Drupal 7中它是核心。

答案 1 :(得分:1)

我会在自定义模块中实现hook_nodeapi(),并在$op == 'view'上检查正确的节点类型和用户角色。根据角色,我将从'$ node-> content'数组中删除相关字段条目。

请注意,需要在CCK之后调用自定义模块才能使其工作,否则CCK字段在`$ node-> content'数组中尚不可用。因此,根据其名称,可能需要将自定义模块权重更改为高于CCK的值。

如果同样需要对节点编辑表单应用逻辑,可以在$op == 'prepare'上执行相同的操作。

答案 2 :(得分:1)

感谢大家的建议!

hook_field_access()是我正在寻找的解决方案。

我之前使用的是 $ node-> field_FIELDNAME [0] ['#value'] ,但我不想为用户添加我的主题(或template.php)函数访问。还有主题问题,这个解决方案没有使用语义CCK 模块提供简单,干净的HTML输出的可能性!

再次感谢! 再见!

聚苯乙烯。为什么我的帖子不是最后一个?? !!

答案 3 :(得分:0)

这很容易,创建node- {YOURTYPE} .tpl.php,主题它,并添加条件以显示日期中的字段依赖...