後台權限由環境變數決定:正式環境一律擋,本機一律放行。


後台開發最煩的事,是每次 migrate:fresh 之後,都要先去建一個帳號、登入、給權限,才能看到你正在做的那個頁面。

我的做法是讓權限跟著環境走:

// 後台一律要求登入與 admin 權限;只有 local / dev / testing 例外,方便本機開發與測試。
$middleware = app()->environment(['local', 'dev', 'testing'])
    ? []
    : ['auth', 'can:admin'];

Route::prefix('admin')->name('admin.')->middleware($middleware)->group(...);

本機打開 /admin 就直接進去。正式環境沒有登入、沒有 admin 權限,一律擋。

三個關鍵

一、deny-by-default。 注意那個三元運算的寫法——「擋」是預設值,「放行」是例外。 不是「如果是正式環境就加上驗證」,而是「除非是那三個環境,否則一律驗證」。未來多出一個 staging 環境,它會自動落在「擋」那一邊。這個方向不能寫反。

二、只有一個地方決定。 全站的後台路由共用這一段,不是每個 controller 各自判斷。要稽核的時候,只有一行要看。

三、用環境變數判斷,不要用別的。 我看過有人用網域判斷、用 branch 名稱判斷、甚至用 if ($_SERVER['HTTP_HOST'] === 'localhost')。那些都會在某天出錯。APP_ENV 是唯一一個部署時一定會被正確設定的東西。

前提:dev 環境要有別的保護

這招有一個前提必須講清楚:dev 是會被放行的。

如果你的 dev 站台開在公網上、網址又好猜,那等於後台沒鎖。所以 dev 環境至少要有一道外層保護——基本認證(Basic Auth)、IP 白名單、或是放在 VPN 後面。

這是「開發便利」跟「安全」之間的交換,你要知道自己換了什麼。 我的判斷是:dev 站的資料都是假的,用一道 Basic Auth 擋住就夠了,換來的是每天開發的順暢。

但 production 永遠不在那個清單裡,這點沒有商量餘地。

順帶一提

同樣的手法我也用在 /_poc/* 那批路由上——只在 local / dev / testing 註冊,正式環境連路由都不存在。


⭐️ Shopify 網站開發服務(給品牌)
https://job.turn.tw/shopify-services

⭐️ 川川電商事務所(全客製電商開發服務)
https://chuanchuan.tw

⭐️ 台灣 Shopify 商家交流 LINE 群(非官方)
https://line.me/ti/g2/PZ_1LILWVWWuzZQ50HNpYA-A3k6QXWF6znqoBQ

⭐️ 台灣 Shopify 開發者 LINE 群(非官方)
https://line.me/ti/g2/YUasX5K3CJ4QdIx76zppjHlh3-q8w-xkSyK1LA

共有 0 則留言


⭐️ Shopify 網站開發服務(給品牌)
https://job.turn.tw/shopify-services

⭐️ 川川電商事務所(全客製電商開發服務)
https://chuanchuan.tw

⭐️ 台灣 Shopify 商家交流 LINE 群(非官方)
https://line.me/ti/g2/PZ_1LILWVWWuzZQ50HNpYA-A3k6QXWF6znqoBQ

⭐️ 台灣 Shopify 開發者 LINE 群(非官方)
https://line.me/ti/g2/YUasX5K3CJ4QdIx76zppjHlh3-q8w-xkSyK1LA
🏆 本月排行榜
🥇
站長阿川
📝45   💬1  
643
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次