web-dev-qa-db-ja.com

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

現在のユーザーが更新できるノードのリストを作成したいと思います。これは、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に更新列を設定していないようです。

7
thsutton

以下は、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);
                 }

    }

ビューを使用して同様のことを行うことができます。ビューをインストールするPHP module- https://drupal.org/project/views_php 。これにより、PHPフィルターが提供されます。 PHPフィルターを追加した後、次のコードを記述します。

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

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

enter image description here

2

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

2
Nathanial Hesse