Drupalで管理者以外のユーザーにも設定画面へのアクセスを許可する方法
本記事の一部はAIが作成しました。
概要
Drupalでカスタムモジュールの設定画面を作成する際、管理者以外のユーザーにもアクセスを許可したい場合があります。今回は、GitHub Webhookモジュールを例に、この問題の解決方法を説明します。
問題の発生
最初の状態では、以下のようなルーティング設定でした:
# github_webhook.routing.yml
github_webhook.settings:
path: '/admin/config/github_webhook'
defaults:
_form: '\Drupal\github_webhook\Form\SettingsForm'
_title: 'GitHub Webhook Settings'
requirements:
_permission: 'administer site configuration'
この設定では、administer site configuration
権限を持つ管理者のみがアクセス可能で、一般ユーザーはアクセスできませんでした。
解決方法1: 専用権限の作成
まず、専用の権限を作成します。github_webhook.permissions.yml
ファイルを新規作成:
access github webhook settings:
title: 'Access GitHub Webhook Settings'
description: 'Allow users to access GitHub webhook configuration.'
そして、ルーティングファイルを更新:
# github_webhook.routing.yml
github_webhook.settings:
path: '/admin/config/github_webhook'
defaults:
_form: '\Drupal\github_webhook\Form\SettingsForm'
_title: 'GitHub Webhook Settings'
requirements:
_permission: 'access github webhook settings'
問題の発覚: /adminパスの制限
しかし、この変更だけでは解決しませんでした。Drupalでは/admin
配下のパスは管理エリアとして扱われ、追加の権限チェックが行われるためです。
解決方法2: パスの変更
根本的な解決として、パスを管理エリア外に移動:
# github_webhook.routing.yml
github_webhook.settings:
path: '/github-webhook/settings' # 管理パス外に変更
defaults:
_form: '\Drupal\github_webhook\Form\SettingsForm'
_title: 'GitHub Webhook Settings'
requirements:
_permission: 'access github webhook settings'
新たな問題: 管理画面からの消失
パスを移動すると、今度は管理画面の設定一覧から項目が消失してしまいました。
最終解決: メニューリンクの手動追加
この問題を解決するために、github_webhook.links.menu.yml
ファイルを作成:
github_webhook.settings:
title: 'GitHub Webhook Settings'
description: 'Configure GitHub webhook settings.'
route_name: github_webhook.settings
parent: system.admin_config_services
weight: 10
これにより、パスは/github-webhook/settings
のままで、管理画面の「サービス設定」配下にもメニュー項目が表示されるようになります。
配置場所のカスタマイズ
parent
の値を変更することで、管理画面内の表示場所を調整できます:
-
system.admin_config_services
- 「サービス設定」配下 -
system.admin_config_system
- 「システム設定」配下 -
system.admin_config_development
- 「開発設定」配下 -
system.admin_config
- 「設定」のトップレベル
代替方法: hook_menu_links_discovered_alter()
.links.menu.yml
ファイルの代わりに、モジュールファイル内でフックを使用することも可能です:
/**
* Implements hook_menu_links_discovered_alter().
*/
function github_webhook_menu_links_discovered_alter(&$links) {
$links['github_webhook.settings'] = [
'title' => 'GitHub Webhook Settings',
'route_name' => 'github_webhook.settings',
'description' => 'Configure GitHub webhook settings.',
'parent' => 'system.admin_config_services',
'weight' => 10,
];
}
権限の付与
最後に、管理画面の「ユーザー権限」ページで、適切なロールに新しく作成したaccess github webhook settings
権限を付与します。
まとめ
Drupalで管理者以外のユーザーに設定画面へのアクセスを許可するには:
-
専用権限の作成 -
.permissions.yml
ファイルで新しい権限を定義 -
パスの変更 -
/admin
配下から通常のパスに移動 -
メニューリンクの追加 -
.links.menu.yml
で管理画面に項目を表示 - 権限の付与 - 管理画面で適切なロールに権限を設定
-
キャッシュクリア -
drush cr
で変更を反映
これらの手順により、柔軟な権限管理が可能になり、プロジェクトのニーズに応じたアクセス制御を実現できます。
変更を行った際は、必ずdrush cr
でキャッシュをクリアすることを忘れずに!
さいごに
間違っている点もあるかもしれませんが、参考になりましたら幸いです。
Discussion