ユーザーは、特定のノードのみにアクセスでき、そのタイプのすべてのノードではなく、どのようにアクセスできますか?
質問
特定のコンテンツタイプの表示と編集のユーザーがいます。これにより、すべてのユーザーに特権が与えられ、そのタイプのすべてのノードを表示および編集します。しかし、実際には、各ユーザーに一意のノードを作成したいので、そのユーザーのみがそれを表示および編集できるようにします。 Drupal 7でこれを行うにはどうすればよいですか?
解決
既存のモジュールを使用して、 コンテンツアクセス, 、これ(一緒に使用する場合 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;
}
このフックの実装を使用して、作成したコンテンツタイプの各ノードに与えられたアクセス権限を手動で編集する必要はありません。ノードの所有者を変更する必要がないため、ノードの所有者を変更する方が簡単です。そのノードのアクセス権限を変更する必要はありません。コードは、更新を自動的に許可し、ノードの所有者(または著者)として設定されたユーザーにアクセス許可を表示します。
他のヒント
これを行うには、特別なモジュールやカスタムコードは必要ありません。マニュアルを作成するノードを作成し、適切なユーザーをノードの所有者(著者)として設定し、このコンテンツに許可を設定して、独自のコンテンツのみを編集する(このタイプのコンテンツを編集するのではない)、完了です。
あなたが話しているのは、Drupal Node Access Controlです。これは大きな主題です。
ノードアクセス制御のコアの組み込みサポートはむしろコースであり、ロールごとにノードを表示するためのアクセスを制御するには、何らかのノードアクセス制御モジュールを使用する必要があります。があります drupal.orgのページすべてのノードアクセスモジュールをリストします, 、それぞれのカプセルのレビューを使用します。そのページを見て、アクセスを制御するための適切なモジュールを見つけることができるかどうかを確認することをお勧めします。
Flexiアクセス モジュールは、要件に最も近い一致するモジュールのようです。 主な機能 役割や分類学の用語ではなく、個々のユーザーのアクセスを制御できるようにすることです。
これは、個々のユーザーにACLS(アクセス制御リスト)をセットアップできる小さなモジュールです。基本的にはユーザーインターフェイスです ACL モジュールなので、それもインストールする必要があります。
これには、より高度なアクセス制御モジュールの機能がありません。 コンテンツアクセス, 、しかし、それは積極的に維持されており、現在、その問題のキューにオープンなバグはありません。
開示:私はFlexi Accessのメンテナーです。