Wie kann ich programmgesteuert Listenknoten abrufen, die ein Benutzer aktualisieren kann?

7

Ich möchte eine Liste von Knoten erstellen, die der aktuelle Benutzer aktualisieren kann. Dies soll auf einer Site mit organischen Gruppen verwendet werden.

Meine erste Hoffnung war, dass es einen Ansichtsfilter geben würde, der überprüfen kann, ob der Inhalt bearbeitet werden kann. Ach nein.

Mein zweiter Versuch war, EFQ zu verwenden:

$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
    ->entityCondition('bundle', 'suggested_listing')
    ->addMetaData('account', $account)
    ->addMetaData('op', 'update')
    ->addTag('node_access')
    ->pager(20);

würde funktionieren, aber es scheint, als ob OG die Update-Spalte nicht einstellt node_access?

thsutton
quelle
Auf welchen Haken zielen Sie mit Tag node_access?
Bulat
Ich dachte, EFQ verwendet node_access automatisch, sodass das Tag nicht explizit benötigt wird.
mpdonadio
Es tut mir nur leid. :-) Trotzdem funktioniert die node_access-Prüfung nur für op == view korrekt.
Thsutton

Antworten:

2

Das Folgende kann im Vergleich zu EFQ ineffizient sein - Sie rufen zuerst die Knoten mit db_select ab und überprüfen jeden Knoten mit der Funktion node_access, aber es funktioniert so, wie Sie es möchten.

//build db query
$result = db_select('node', 'n')
        ->fields('n')->condition('status', 1)
        ->condition("type","suggested_listing", '=')
        ->execute();

        //fetch each node from database
         foreach ($result as $record) {

                $node = node_load($record->nid);
                //check if current logged in user has an update permission on the node being checked
                if(node_access('update', $node)){
                    //user has update permission to this node
                    var_dump($node->title);
                 }

    }

Ähnliches können Sie mit Ansichten tun. Installieren Sie das Views PHP-Modul - https://drupal.org/project/views_php . Es gibt Ihnen einen PHP-Filter. Schreiben Sie nach dem Hinzufügen eines PHP-Filters den folgenden Code.

 $node = node_load($data->nid);

  if(!node_access('update', $node)){
    return TRUE;
   }

Geben Sie hier die Bildbeschreibung ein

Ajinkya Kulkarni
quelle
2

Es sollte einen solchen Ansichtsfilter geben, aber Sie müssen eine Beziehung verwenden (Zugriffsprotokoll: Benutzer sollte dies tun) und dann den Filter Benutzer: Berechtigung hinzufügen.

Nathanial Hesse
quelle