Доступ к полю по дате создания узла в Drupal с помощью CCK
Я ищу конкретное поведение, которое дает разрешение на просмотр одного или нескольких полей cck на основе даты и времени создания узла.
В частности мне нужно:
Предоставление роли A: Полный доступ ко всем CCK (старым и новым) Предоставление роли B: Доступ ко всем CCK, но ТОЛЬКО к тем, которые присутствуют в узле, старше 1 года. Анонимный пользователь: Нет доступа к полю CCK.
Как я могу получить этот результат?
4 ответа
Вы хотите контролировать разрешения на уровне поля, чтобы я не использовал 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 это в ядре.
Я бы реализовал hook_nodeapi()
в пользовательском модуле, и на $op == 'view'
проверьте правильность типа узла и роли пользователя. В зависимости от роли я бы удалил соответствующую запись поля из массива `$node->content'.
Обратите внимание, что пользовательский модуль должен быть вызван после CCK, чтобы это работало, так как в противном случае поля CCK еще не доступны в массиве `$node->content'. Поэтому, в зависимости от его имени, может потребоваться изменить вес пользовательских модулей на значение, превышающее значение CCK.
Если ту же логику нужно применять и к формам редактирования узла, то можно сделать то же самое на $op == 'prepare'
,
Спасибо всем за предложения!
Hook_field_access() - это решение, которое я ищу.
Ранее я использовал $node->field_FIELDNAME[0]['#value'], но я не люблю вставлять в свою тему (или в template.php) функции для доступа пользователей. Была также проблема с тематикой, это решение не давало мне возможности для простого и чистого вывода HTML с использованием модуля Semantic CCK!
Еще раз спасибо! До свидания!
Ps. почему мой пост не после последнего??!!
Это просто, создайте node-{YOURTYPE}.tpl.php, создайте его тему и добавьте условия для отображения зависимости полей от дат...