現在のユーザーが更新できるノードのリストを作成したいと思います。これは、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
に更新列を設定していないようです。
以下は、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;
}
そのようなビューフィルターがあるはずですが、関係(アクセスログ:ユーザーが行う必要があります)を使用して、ユーザー:権限というフィルターを追加する必要があります。