Доступ к полю по дате создания узла в Drupal с помощью CCK - PullRequest
1 голос
/ 16 сентября 2010

Я ищу конкретное поведение, которое дает разрешение на просмотр одного или нескольких полей cck на основе даты и времени создания узла.

В частности, мне нужно:

Предоставление роли A: Полный доступ ко всем CCK (старым и новым) Предоставление роли B: Доступ ко всем CCK, но ТОЛЬКО к тем, кто присутствует в узле, старше 1 года Анонимный пользователь: нет доступа к полю CCK

Как я могу получить этот результат?

Ответы [ 4 ]

2 голосов
/ 17 сентября 2010

Вы хотите контролировать разрешения на уровне поля, поэтому я бы не стал использовать hook_nodeapi() Вместо этого я бы предложил вам использовать hook_field_access (или использовать комбинацию hook_nodeapi и hook_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

hook_field_access(), доступен в Drupal 6 из модуля CCK. В Drupal 7 он находится в ядре.

1 голос
/ 18 сентября 2010

Спасибо всем за предложения!

hook_field_access () - это решение, которое я ищу.

Я ранее использовал $ node-> field_FIELDNAME [0] ['# value'] но я не люблю вставлять в мою тему (или в template.php) функции для доступа пользователей.Была также проблема с тематикой, это решение не давало мне возможности для простого и чистого вывода HTML с использованием модуля Semantic CCK !

Еще раз спасибо!Пока!

Ps.почему мой пост не после последнего ?? !!

1 голос
/ 17 сентября 2010

Я бы реализовал hook_nodeapi() в пользовательском модуле, а на $op == 'view' проверил бы для правильного типа узла и роли пользователя. В зависимости от роли я бы удалил соответствующую запись поля из массива $ node-> content.

Обратите внимание, что пользовательский модуль должен быть вызван после CCK, чтобы это работало, иначе поля CCK еще не доступны в массиве `$ node-> content '. Поэтому, в зависимости от его имени, может потребоваться изменить вес пользовательских модулей на значение выше, чем у CCK.

Если ту же логику нужно применять и к формам редактирования узла, то можно сделать то же самое для $op == 'prepare'.

0 голосов
/ 17 сентября 2010

Это просто, создайте node- {YOURTYPE} .tpl.php, создайте его тему и добавьте условия для отображения зависимости полей от дат ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...