こんにちは! (株)Zucks で  Zucks Ad Network というアドネットワークシステムを開発・運用している @brtriver です。

先週末に Symfonyユーザー会 主催 の Symfony 勉強会 #9フォトクリエイトさんのご協力のもと開催され、"管理画面Webアプリケーションのアクセスコントロール" というお題で話をしてきました。スライドは既に公開していますが、内容について補足しつつ "運用しやすい管理画面" について書いてみたいと思います。

 

運用しやすい管理画面とは

今回いいたかったことをまとめると以下の2点になります。

  • URLに必要な情報が含まれていること
  • アクセスコントロール (ACL) がシンプルなこと

Permanent Link な URL

運用のしやすさの一つは "何かあったときに調査しやすいかどうか" だと思います。
そのためには、問題が起きた場合にそのURLを共有してもらえれば同じ画面を見れるというのは地味ですがとても有効です。

"〇〇のアカウントでログインしてもらって、△△に遷移して、XXを選択してもらったときの画面なんですが..."

という会話をしないと見れないのは運用しづらいですよね。

シンプルな ACL

また、ACL の設計は管理画面ではとても重要ですし、ミスすると即事故になる可能性があります。
取得するデータの内容だったり、見せ方だったりロールによって細かく変わるというのはよくある話です。
しかし、それをそのまま深く考えずに実装していくと、修正がとても怖くて触れないロールごとの条件分岐地獄になる可能性があります。

たとえば、各所で権限チェックを行うようなコードになってしまうパターンです。



今回は Controller や View で権限チェックをせずに、Routing部分から Requestを受けた段階で 権限をチェック するようにしました。そして、Controller と View は権限ごとに完全に分離しました。



Symfony2 を利用しているので、フレームワークで用意されている Security 機能を薄めに活用しつつシンプルにルーティング部分で ACL を行うようにしました。

プロダクトは日々進化を遂げており1日に5回デプロイするなんてことも普通にありますが、権限周りで事故を起こさずにロール毎に日々管理画面を運用できています。

また、シンプルな ACL はエンジニアの健康を維持するためにも必要だなと思っています。健康と睡眠大事です。

今回も勉強会は本編だけでなく懇親会も 23:00 まで熱い会話で盛り上がっていました。
次回は3ヶ月後ぐらいを予定(?) しているので興味がある方は是非参加してみてください。


仲間を募集してます!

VOYAGE GROUPでは仲間を募集しています。興味がある方は とりあえず 天ぷら食べながら #ajiting しましょう! お気軽に twitter でメンションください!