質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

Q&A

解決済

1回答

2824閲覧

cakephp3でのルーティングの設定によるアクセス制限

mittchy

総合スコア7

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

0グッド

0クリップ

投稿2020/06/15 10:45

前提・実現したいこと

ルーティングによって通常画面と管理画面を分けているのですが、そこに.envファイルから環境変数を読み取って特定の値の時のみ管理画面へのアクセスを許可するようなルーティングを行いたいです。

該当のソースコード

PHP

1 2 //通常画面 3 Router::prefix('/', function (RouteBuilder $routes) { 4 $routes->applyMiddleware('csrf'); 5 $routes->fallbacks(DashedRoute::class); 6 }); 7 8 //管理画面 9 Router::prefix('admin', function (RouteBuilder $routes) { 10 $routes->applyMiddleware('csrf'); 11 $routes->fallbacks(DashedRoute::class); 12 });

env

1 2ADMIN_DISPLAY=1 3

試したこと

単純にifで括ってみたのですが、スルーされました。

PHP

1 2 //通常画面 3 Router::prefix('/', function (RouteBuilder $routes) { 4 $routes->applyMiddleware('csrf'); 5 $routes->fallbacks(DashedRoute::class); 6 }); 7 8 //管理画面 9if(env('ADMIN_DISPLAY') == 1){ 10 Router::prefix('admin', function (RouteBuilder $routes) { 11 $routes->applyMiddleware('csrf'); 12 $routes->fallbacks(DashedRoute::class); 13 }); 14}

env('ADMIN_DISPLAY') == 1でダメだった時のリダイレクト先の指定の仕方ももし分かる方おりましたら教えていただけたらと思います。
足りていない、必要な情報がございましたらご指摘いただけたらと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

提示のコードを試しましたが、ADMIN_DISPLAYでルーティングのON/OFFはできるようです。

反映されない可能性としては、

  1. ADMIN_DISPLAY が常に1の状態
  2. ルーティングのキャッシュが有効 (ルーティングミドルウェア - 3.9

が考えられます。
ルーティングが切り替えられているかはコマンドラインで、

sh

1bin/cake routes 2ADMIN_DISPLAY=1 bin/cake routes 3ADMIN_DISPLAY=0 bin/cake routes

のようにしてそれぞれ確認してみてください。

env('ADMIN_DISPLAY') == 1でリダイレクト先の指定の仕方

これをやりたいのであれば、Admin側の基底コントローラーのbeforeFilterでチェックして弾く

php

1 public function beforeFilter(Event $event) 2 { 3 if(!env('ADMIN_DISPLAY') && $this->request->getParam('prefix') === 'admin') { 4 return $this->redirect([ ... ]); 5 } 6 } 7

もしくは、RoutingMiddlewareの後にチェック用のミドルウェアを差し込む方法が考えられます。

php

1// in src/Application.php 2 3 ->add(new RoutingMiddleware($this)) 4 ->add(static function ($request, $response, $next) { 5 if (!env('ADMIN_DISPLAY') && $request->getParam('prefix') === 'admin') { 6 return $response 7 ->withLocation('/redirect-to-url'); 8 } 9 10 return $next($request, $response); 11 });

投稿2020/06/23 23:43

nojimage

総合スコア959

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問