回答:
あなたがしている[OK]を、非常に小さなカスタムモジュールを書く場合は、の組み合わせを使用することができますhook_permission()
し、hook_node_access()
これを行うには:
function MYMODULE_permission() {
return array(
'unconditionally view unpublished content' => array(
'title' => t('Unconditionally View Unpublished Content'),
'restrict access' => TRUE
)
);
}
function MYMODULE_node_access($node, $op, $account) {
// We're only bothered about the 'view' operation at the moment
if ($op == 'view') {
// If the user has access to our new permission, let 'em at it
if (user_access('unconditionally view unpublished content', $account)) {
return NODE_ACCESS_ALLOW;
}
}
// For everything else let the system decide.
return NODE_ACCESS_IGNORE;
}
これで、新しいアクセス許可を割り当てるロールは、公開されているかどうかに関係なく、ノードを表示できるようになります。
最初に上記のコードを試しましたが、これは素晴らしいことです。しかし、ロールに未公開コンテンツに対する権限を付与した後、そのロールはビューで未公開コンテンツを表示できませんでした。これは一部の編集者ロールにとって非常に便利です...
モジュールview_unpublishedを使用して解決しました。
これは私が作ったものです...
各ノードタイプに対して「コンテンツの表示権限」を作成します。nodeモジュールの機能とほとんど同じですが、追加のオプションが追加されます。
/**
* Implements hook_permission().
*/
function MODULE_permission() {
$perms = array();
foreach (node_permissions_get_configured_types() as $type) {
$info = node_type_get_type($type);
$perms += array(
"view $type content" => array(
'title' => t('%type_name: View any content', array('%type_name' => $info->name)),
)
);
}
return $perms;
}
/**
* Implements hook_node_access().
*/
function MODULE_node_access($node, $op, $account) {
$type = is_string($node) ? $node : $node->type;
if (in_array($type, node_permissions_get_configured_types())) {
if ($op == 'view' && user_access('view ' . $type . ' content', $account)) {
return NODE_ACCESS_ALLOW;
}
}
return NODE_ACCESS_IGNORE;
}
そのためのDrupal 7およびDrupal 8のモジュールがあります。
このモジュールを使用すると、特定のユーザーロールにアクセス権を付与して、特定のタイプの非公開ノードを表示できます。この点でアクセス制御は非常にきめ細かです。
公式の管理ガイドhttps://drupal.org/node/1106606を参照 すると、Kojoによって提案されたview_unpublishedモジュールが迅速かつ簡単なソリューションです。
&& user_access('administer nodes')
コンテンツを作成する権利に依存するように追加しましたが、セキュリティを少し強化するために。今では「無条件」ではありません。例に感謝します!