本記事の一部はAIが作成しました。
概要
Drupalでカスタムモジュールの設定画面を作成する際、管理者以外のユーザーにもアクセスを許可したい場合があります。今回は、GitHub Webhookモジュールを例に、この問題の解決方法を説明します。
問題の発生
最初の状態では、以下のようなルーティング設定でした:
この設定では、administer site configuration権限を持つ管理者のみがアクセス可能で、一般ユーザーはアクセスできませんでした。
解決方法1: 専用権限の作成
まず、専用の権限を作成します。github_webhook.permissions.ymlファイルを新規作成:
そして、ルーティングファイルを更新:
問題の発覚: /adminパスの制限
しかし、この変更だけでは解決しませんでした。Drupalでは/admin配下のパスは管理エリアとして扱われ、追加の権限チェックが行われるためです。
解決方法2: パスの変更
根本的な解決として、パスを管理エリア外に移動:
新たな問題: 管理画面からの消失
パスを移動すると、今度は管理画面の設定一覧から項目が消失 してしまいました。
最終解決: メニューリンクの手動追加
この問題を解決するために、github_webhook.links.menu.ymlファイルを作成:
これにより、パスは/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ファイルの代わりに、モジュールファイル内でフックを使用することも可能です:
権限の付与
最後に、管理画面の「ユーザー権限」ページで、適切なロールに新しく作成したaccess github webhook settings権限を付与します。
まとめ
Drupalで管理者以外のユーザーに設定画面へのアクセスを許可するには:
- 専用権限の作成 -
.permissions.ymlファイルで新しい権限を定義 - パスの変更 -
/admin配下から通常のパスに移動 - メニューリンクの追加 -
.links.menu.ymlで管理画面に項目を表示 - 権限の付与 - 管理画面で適切なロールに権限を設定
- キャッシュクリア -
drush crで変更を反映
これらの手順により、柔軟な権限管理が可能になり、プロジェクトのニーズに応じたアクセス制御を実現できます。
変更を行った際は、必ずdrush crでキャッシュをクリアすることを忘れずに!
さいごに
間違っている点もあるかもしれませんが、参考になりましたら幸いです。