プログラムでユーザーが更新できるリストノードを取得するにはどうすればよいですか?


7

現在のユーザーが更新できるノードのリストを作成したいと思います。これは、Organic Groupsを使用するサイトで使用されます。

私の最初の希望は、コンテンツが編集可能であることを確認できるビューフィルターがあることでした。ああ、違う。

私の2番目の試みはEFQを使用することでした:

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

動作しますが、OGが更新列を設定していないようnode_accessです。


あなたはタグでどのフックをターゲットにしていますnode_accessか?
Bulat 2013

私はEFQが自動的にnode_accessを使用するので、タグが明示的に必要ではないと思いましたか?
mpdonadio

それはそうです、私はただ要点を研究しています。:-)それでもなお、node_accessチェックはop == viewに対してのみ正しく機能します。
thsutton 2013

回答:


2

以下は、EFQと比較してそれを行うための非効率的な方法である可能性があります。最初にdb_selectを使用してノードを取得し、node_access関数を使用して各ノードを確認しますが、望みどおりに機能します。

//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);
                 }

    }

ビューを使用して同様のことができます。Views PHPモジュールをインストールします-https://drupal.org/project/views_php。PHPフィルターを提供します。PHPフィルターを追加したら、次のコードを記述します。

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

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

ここに画像の説明を入力してください


2

そのようなビューフィルターがあるはずですが、関係(アクセスログ:ユーザーが行う必要があります)を使用して、User:Permissionというフィルターを追加する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.