本記事の一部は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でキャッシュをクリアすることを忘れずに!
さいごに
間違っている点もあるかもしれませんが、参考になりましたら幸いです。