web-dev-qa-db-ja.com

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

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

10
Ek Kosmos

既存のモジュールを使用して、 Content Access でそれを行うことができます(これを一緒に使用すると [〜#〜] 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;
}

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

11
kiamlaluno

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

5
Petr Svehla

あなたが話しているのはDrupalノードのアクセス制御です。これは大きなテーマです。

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

Flexi Access モジュールは、1次関数が許可するため、要件に最も近いモジュールのようです役割や分類用語ではなく、個々のユーザーのアクセスを制御します。

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

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

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

1
Free Radical