回答:
drupal 7の場合、hook_node_access()を使用してみてください:
/**
* Implements hook_node_access().
*/
function YOURMODULE_node_access($node, $op, $account) {
if (
$node->type == 'ebook' &&
$op == 'view' &&
!in_array('MonthlySubscriber', $account->roles)
) { return NODE_ACCESS_DENY; }
return NODE_ACCESS_IGNORE;
}
これは、権限のないユーザーからノードページ(ノード/ NID)を保護する簡単な方法です。
/**
* Implements hook_menu_alter().
*/
function mymodule_menu_alter(&$items) {
$items['node/%node']['access callback'] = 'mymodule_check_node_access';
}
/**
* Determines whether the current user may perform the operation on the node.
*/
function mymodule_check_node_access($op, $node) {
if ($node->type == 'protected_type' && !user_access('administer site configuration')) {
return FALSE;
}
return node_access($op, $node);
}
hook_node_access
ビューのようにノードを「リスト」するものでは、使用は機能しないことに注意してください。そのため、でビューへのアクセスを制限できますhook_node_access
が、ビューまたはカスタムノードクエリでは、引き続きそのノードがユーザーに表示される場合があります。hook_node_access
編集制御、作成/更新/削除操作の制御に役立つ
Drupal 7のインストールではコンテンツアクセスが機能しなかったため、代わりにノードビューのアクセス許可を使用しました。
hook_node_accessフックについては、D7 APIドキュメントにあるコードスニペットを使用しました。
このコードは、「ebookを表示」権限を持つユーザーに「ebook」コンテンツを表示するアクセスを許可します。
hook_permission()を実装してアクセスを制御するには、新しい許可が必要です。
/**
* Implements hook_permission().
*/
function mymodule_permission() {
return array(
'view ebook' => array(
'title' => t('View Ebook'),
'description' => t('View Ebook nodes.'),
),
);
}
hook_node_access()を実装することにより、Drupalはノードへのアクセスを許可または拒否できます。
/**
* Implements hook_node_access().
*/
function mymodule_node_access($node, $op, $account) {
// Checks for an ebook node in view mode.
if (is_object($node) && $node->type === 'ebook' && $op === 'view') {
// Grants permission to view the node if the current user has an role
// with the permission 'view ebook'.
if (user_access('view ebook')) {
return NODE_ACCESS_ALLOW;
}
// Otherwise disallows access to view the node.
return NODE_ACCESS_DENY;
}
// For all other nodes and other view modes, don't affect the access.
return NODE_ACCESS_IGNORE;
}
他の許可(編集、削除など)は、通常のDrupal許可を介して処理できます。
オプションで、hook_query_TAG_NAME_alterを実装することにより、管理概要からコンテンツを削除できます。
/**
* Implements hook_query_TAG_NAME_alter().
*/
function mymodule_query_node_admin_filter_alter(QueryAlterableInterface $query) {
if (!user_access('view ebook')) {
$query->condition('n.type', 'ebook', '!=');
}
}
Node View Permissionsモジュールを使用して確認します。コンテンツアクセスモジュールよりも簡単です。
D6と同様に、選択したコンテンツタイプに「コンテンツを表示」および「コンテンツを表示」権限が追加されます。
従うべき手順:
/admin/config/content/node-view-permissions
アクセスを制限するコンテンツタイプに移動し
て選択します。次に、/admin/people/permissions#module-node_view_permissions
コンテンツを表示できるようにするロールに移動して選択します。権限を保存します。
できた!