ユーザーはどのようにして、そのタイプのすべてのノードではなく、1つの特定のノードのみにアクセスできますか?


10

特定のコンテンツタイプに対する表示および編集権限を持つユーザーがいます。これにより、そのタイプのすべてのノードを表示および編集する権限がすべてのユーザーに付与されます。しかし、実際には、ユーザーごとに一意のノードを作成して、そのユーザーだけがノードを表示および編集できるようにしたいと考えています。Drupal 7でこれを行うにはどうすればよいですか?


1
モジュールを使用してそれを行う方法、または必要なコードを作成する方法を意味しますか?
kiamlaluno

もう1つの方法は、ノードの使用を拒否し、フィールドごとにユーザープロファイルを拡張することです。
ya.teck 2011年

ユーザーごとのこのノードは、ある種のユーザープロファイル要件を満たすためのようです。別のノードである必要がありますか、それともユーザーエンティティ自体を追加のフィールドで拡張する方が良いでしょうか?
アルフレッドアームストロング

Drupal 7では、ユーザーごとのノード表示権限が削除されました。このモジュールdrupal.org/project/node_view_permissionsで
giorgio79

モジュール「nodeaccess」リンクを使用してくださいdrupal.org/project/nodeaccess私はそれがあなたを助けてくれるといいのですが
Mahipal Purohit

回答:


11

既存のモジュールを使用して、コンテンツアクセスでそれを行うことができます。これは、ACLと一緒に使用すると、各ユーザーのノードにアクセスするためのアクセス許可を設定できます。
つまり、ノードごとに手動でアクセス許可を設定する必要があります。

ノードを手動で作成し、ノードの所有者として設定されているユーザーのみがノードを表示(および編集)できるようにしたい場合は、カスタムモジュール(つまり、あなたのサイトに使用されます)、そしてhook_node_access()次のように実装します(コードは読みやすくするために書かれています):

function mymodule_node_access($node, $op, $account) {
  // We are interested to existing objects. When the node is being created, Drupal passed the node type instead of the node object. 
  if (is_object($node)) {
    $bool = (
      ($node->type == 'the node type you need to check') && 
      (($op == 'view') || ($op == 'update'))
    );
    if ($bool) {
      if ($account->uid == $node->uid) {
        return NODE_ACCESS_ALLOW;
      }
      else {
        return NODE_ACCESS_DENY;
      }
    }
  }

  return NODE_ACCESS_IGNORE;
}

このフックの実装を使用すると、作成するコンテンツタイプの各ノードに付与されているアクセス許可を手動で編集する必要はありません。ノードのアクセス許可を変更する必要がないため、ノードの所有者を変更することも簡単です。コードは、ノードの所有者(または作成者)として設定されたユーザーに、更新および表示のアクセス許可を自動的に付与します。


5

これを行うのに特別なモジュールやカスタムコードは必要ありません。それらのノードを手動で作成し、適切なユーザーをノードの所有者(作成者)として設定し、このコンテンツに(このタイプのコンテンツは編集せずに)自分のコンテンツのみを編集する権限を設定すれば完了です。


1

あなたが話しているのは、大きな主題であるDrupalノードのアクセス制御です。

ノードアクセス制御に対するコアの組み込みサポートはかなり進んでおり、ロールを使用してノードを表示するためのアクセスを制御するには、何らかのノードアクセス制御モジュールを使用する必要があります。Drupal.orgには、すべてのノードアクセスモジュールを一覧表示するページがあり、それぞれのカプセルレビューが記載されています。アクセスを制御するための適切なモジュールを見つけることができるかどうかを確認するために、そのページをご覧になることをお勧めします。

フレキシアクセスのように、モジュールは、あなたの要件に最も近い一致するモジュールであると思われる主な機能はなく、役割によって、あるいは分類用語で、あなたは個々のユーザーのアクセスを制御できるようにすることです。

これは、個々のユーザーのACL(アクセス制御リスト)を設定できる小さなモジュールです。これは基本的にACLモジュールのユーザーインターフェイスであるため、これもインストールする必要があります。

Content Accessなどのより高度なアクセス制御モジュールの一部の機能はありませんが、積極的にメンテナンスされており、現在、問題キューに未解決のバグはありません。

開示:私はFlexi Accessのメンテナーです。

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