Права доступа. Что я делаю не правильно?

Главные вкладки

Аватар пользователя Alex_R Alex_R 17 февраля 2011 в 14:06

Попытался разобраться с установкой прав доступа к нодам и ничего не получилось Sad Хотелось бы понять в чем моя ошибка.

Есть мультисайтинг с общим контентом, есть типы материалов "страница" и "новости", в каждом из них есть поле ССК в котором хранится базовый урл сайта на котором он был создан. Нужно сделать так, чтобы "страницы" были доступны для просмотра только на том сайте, где были созданы, а "новости" можно было бы видеть везде, а редактировать и удалять только на родительском сайте (исключение для автора, если уж видит свой материал, то может с ним все делать).

Изучив этот пример http://api.drupal.ru/api/file/developer/examples/node_access_example.mod...
написал свой код (взяв за основу код примера)

<?php
function mymodule_node_access_records($node) {
 if (
$node->type == 'page'||$node->type == 'news') {   //если тип материала не страница или новость, то уходим отсюда.
    
global $base_url ;
    
$grants = array();
    if (
$node->field_site[0][value] <> $base_url ) { // если другой сайт
      
if ($node->type == 'page' ) {                   // если страница то запрет просмотра.
        
$grants[] = array(
        
'realm' => 'test',
        
'gid' => TRUE,
        
'grant_view' => FALSE,
        
'grant_update' => FALSE,
        
'grant_delete' => FALSE,
        
'priority' => 0,
        );
     }ELSE{                                         
// если не страница, то запрет редактирования и удаления. 
        
$grants[] = array(
        
'realm' => 'test',
        
'gid' => TRUE,
        
'grant_view' => TRUE,
        
'grant_update' => FALSE,
        
'grant_delete' => FALSE,
        
'priority' => 0,
        );
                                 
// если автор, то можно все.
        
$grants[] = array(       
        
'realm' => 'author',
        
'gid' => $node->uid,
        
'grant_view' => TRUE,
        
'grant_update' => TRUE,
        
'grant_delete' => TRUE,
        
'priority' => 0,
        );
      }
      return 
$grants;
    }
  }
}

function 

mymodule_node_grants($account$op) {

  if (

$op == 'view') {
    
$grants['test'] = array(1);
  }

  if (

$op == 'update' || $op == 'delete') {
    
$grants['test'] = array(1);
  }

  

$grants['author'] = array($account->uid);
  return 
$grants;
}

?>

Обновил права доступа к сайту, в результате ничего не поменялось. Что я делаю не так?
Очень хочется разобраться...

Комментарии

Аватар пользователя Alex_R Alex_R 17 февраля 2011 в 18:49

оказывается оно все таки заработало, однако не так как хотелось бы. Sad
Все это затевалось для того, чтобы модераторы не могли редактировать и удалять материалы созданные на другом сайте, однако при данном подходе это не получилось, т.е. если у него стоит, что он может редактировать любой материал типа новость, то на установленные моим модулем права доступа ему наплевать... а как сделать, чтобы оно работало как надо?

Аватар пользователя Alex_R Alex_R 18 февраля 2011 в 14:16

Вроде разобрался и сделал как хотел. Осталась маленькая деталь, которую никак не соображу как правильно сделать.
Сейчас модераторы (роль модератор) может редактировать и удалять только материалы созданные на данном сайте (где они являются модераторами). Хочется дать им еще возможность скрывать от пользователя конкретный материал, созданный на другом сайте, который по логике системы должен быть показан, а модератор с системой не согласен и хочет его скрыть. Посмотрел модуль nodeaccess - вроде всё он должен делать как надо, однако почему то настроить его у меня не получилось Sad Стоит дать модератору возможность управлять доступом к конкретному материалу как тут же у него появляется возможность редактировать и удалять данный материал, чего быть не должно. Это я в настройках модуля не разобрался или он этого не умеет? Может есть какой другой модуль, который это умеет? Или только самому писать?