logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll

hook_permission Drupal 7 さまざまなロールのアクセス権限

17/04/2025, by Ivan

これまでのレッスンで、さまざまな場所にページやブロックを表示し、また 'access arguments''access callback' プロパティを使ってページのアクセス制限を設定しました。このレッスンでは、管理ページを通じて操作へのアクセス権をより柔軟に管理する方法を作成します。そのために、hook_permission()(Drupal 6 では hook_perm() でした)を使います。

hook_permission()

ユーザーの権限を定義します。

このフックは権限を追加でき、モジュールがユーザー権限ページでどれを選択可能にするかを指定できます。また、モジュールが実行するアクションへのアクセスを完全にまたは部分的に制御するのにも使われます。

権限は user_access() を使ってチェックされます。

戻り値

キーが権限名で、値が次のキーと値のペアを含む配列である、配列です:

title: 権限ページに表示される、人間が読める権限の名前。この値は翻訳のために t() で囲むべきです。

description: (任意)権限が何をするかの説明。これも t() で囲むべきです。

restrict access: (任意)ブール値(true または false)で、サイト管理者がこの権限へのアクセスを信頼できるユーザーのみに制限すべきであることを示します。これは、付与されると深刻なセキュリティ脆弱性を露呈しかねない権限に使われます。TRUE に設定すると、user_admin_permissions() で定義されたデフォルトの警告メッセージが theme_user_permission_description() を介して表示されます。デフォルトは FALSE です。

warning: (任意)管理ページでの権限のカスタム警告メッセージ。これは restrict access が TRUE のときに自動生成されるメッセージを上書きします。管理 UI の一貫性を保つため、これは控えめに使ってください。

では、前のレッスンのコードにこのフックを追加しましょう:

function sitemade_permission(){
   return array('view page example'
    => array(
      'title' => t('View page example'),
      'description' => t('View simple page example'),
    ),
   );
}

function sitemade_menu(){
    $items = array();
    $items['admin/config/content/page_example'] = array(
        'title' => 'Page example',
        'description' => 'Simple page',
        'page callback' => '_page_example',
        'access arguments' => array('view page example'),
    );
    return $items;
}

function _page_example($content = NULL) {
    $content = '';
    $query = db_select('node_revision', 'n');
    $query->innerJoin('field_revision_body', 'b', 'b.revision_id = n.vid');
    $query->innerJoin('node', 'd', 'n.nid = d.nid');
    $query->fields('n', array('title'), array('nid'), array('vid'));
    $query->fields('b', array('body_value'));
    $query->condition('d.type', 'news');
    $query->orderBy('n.timestamp', 'DESC');
    $query->range(0, 10);
    $result = $query->execute();

    while ($nodes = $result->fetch()) {
        $content .= '

' . $nodes->title . '

'; $content .= $nodes->body_value; } return $content; }

これで、admin/people/permissions ページに新しい権限が表示されます:

Drupal add permission

この権限を管理者だけに割り当てて、一般ユーザーがこのページにアクセスできないようにします。これで、一般ユーザーが admin/config/content/page_example にアクセスしようとすると、Drupal は 403 エラーでアクセスを拒否します。

次のレッスンでは、Drupal Forms API を使って、設定選択フォーム付きの管理ページを作成します。