ページへのアクセスを定義するための「アクセスコールバック」と「アクセス引数」があります。
ブロックの表示を制限する方法は何ですか? 「アクセスコールバック」もhook_block_info()
で定義できますか、それとも他の方法で定義できますか?
hook_block_info()
の実装から返される配列には、メニューのアクセスコールバックに相当するプロパティが含まれていません。ブロックを実装するモジュールがある場合は、ユーザーが特定の権限を持っているかどうかをチェックするコードを使用して hook_block_view() を実装できます。次のコードは、Drupalモジュールから使用されています。ユーザーが「コンテンツへのアクセス」権限を持っている場合にのみブロックが「レンダリング」されるのがわかります。
case 'recent':
if (user_access('access content')) {
$block['subject'] = t('Recent content');
if ($nodes = node_get_recent(variable_get('node_recent_block_count', 10))) {
$block['content'] = array(
'#theme' => 'node_recent_block',
'#nodes' => $nodes,
);
}
else {
$block['content'] = t('No content available.');
}
}
break;
同様のコードを使用できますが、ユーザーがブロックを表示できるかどうかを確認するためにモジュールが使用するカスタム許可であっても、別の許可を確認します。
hook_block_list_alter() を実装して、他のブロックへのアクセスを制御することもできます。現在のページに表示したくないブロックを配列から削除するだけです。
PHPスニペットをブロック構成に追加し、現在のユーザーがブロックを表示するのに十分な権限を持っているかどうかを確認できます。