Top Banner
管理画面 WEBアプリケーション アクセスコントロール @brtriver (株)VOYAGE GROUP, (株)Zucks
33

管理画面のアクセスコントロール

Sep 08, 2014

Download

Technology

Masao Maeda

運用しやすい管理画面とは
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 管理画面のアクセスコントロール

管理画面 WEBアプリケーション アクセスコントロール

@brtriver(株)VOYAGE GROUP, (株)Zucks

Page 2: 管理画面のアクセスコントロール

About Me

前田 雅央 @brtriverSymfony ユーザー会 Silex 日本語ドキュメント

Page 3: 管理画面のアクセスコントロール

https://speakerdeck.com/bash0c7/phpconference2013presentation-number-phpcon2013

Page 4: 管理画面のアクセスコントロール

管理画面作ったことありますか?

Page 5: 管理画面のアクセスコントロール

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

Page 6: 管理画面のアクセスコントロール

permanent link な URL

運用しやすい管理画面

Page 7: 管理画面のアクセスコントロール

permanent link が無いと…

営業 エンジニア

どのページですか?

../user/articles/list

お客さんは誰…?

お客さんから表示されるはずのデータが見えないという問い合わせが..

Page 8: 管理画面のアクセスコントロール

ユーザーIDがURLから判別不能BAD

ログイン後のURLが1つだけ 裏でajaxが画面遷移せずがんばりすぎ

無駄にPOSTで画面遷移 確認しようにもパラメータが不明

permanent link が無いと…

Page 9: 管理画面のアクセスコントロール

営業 エンジニア

お客さんから表示されるはずのデータが見えないという問い合わせが..

URLください

../user/brtriver/articles/list

確認します

permanent link があると…

Page 10: 管理画面のアクセスコントロール

URLを貰えば同じ画面がみれる

Better

アクセスログからも調査しやすい

permanent link があると…

Page 11: 管理画面のアクセスコントロール

ACL … Access Control List

運用しやすい管理画面

できるだけシンプルなACL

Page 12: 管理画面のアクセスコントロール

ロールごとに 機能 制限

user

管理画面

一覧

編集

admin

Page 13: 管理画面のアクセスコントロール

表示の制限もある

Page 14: 管理画面のアクセスコントロール

ロールごとに機能 + 表示 制限

user

admin

一覧画面・userの場合はナビを変えたい・userは自身のデータのみ閲覧可 ・編集先リンクはadminのみ表示 ・更新日時はadminのみ表示

Page 15: 管理画面のアクセスコントロール

Controller で権限ごとの処理…

Page 16: 管理画面のアクセスコントロール

Viewで権限チェック …

Page 17: 管理画面のアクセスコントロール

現場はもっと複雑だった

Page 18: 管理画面のアクセスコントロール

supervisor

ロールが階層になることも

adminA B C

a b cuser

α β γviewer

Page 19: 管理画面のアクセスコントロール

Symfony2 の chain で解決

Page 20: 管理画面のアクセスコントロール

ACLでの事故は怖い

営業 エンジニア

管理者(admin)だけ編集できるようにして

修正しました

お客さん(user)の画面でも編集できるんだけど…

ええぇぇ!!!1

Page 21: 管理画面のアクセスコントロール

Routing

権限チェック

Controller

権限チェック

View

権限チェック

Request Response

権限チェック

Request Response

Admin

User

複雑な 権限チェック パターン

Page 22: 管理画面のアクセスコントロール

Controller View を

Controller ViewRequest Response

Routing

権限チェック

Controller ViewRequest Response

Admin

User

権限チェック から開放

Page 23: 管理画面のアクセスコントロール

Routing に規約(prefix)を追加

• ROLE_USER は /user/で始まるパス • ROLE_USER は {user_id} をURLに含むこと

規約

Page 24: 管理画面のアクセスコントロール

Symfony には 高機能な ACL/ACE がある

http://symfony.com/doc/current/cookbook/security/acl.html

Page 25: 管理画面のアクセスコントロール

http://symfony.com/doc/current/cookbook/security/acl.html

Alternatives to ACLs Using ACL's isn't trivial, and for simpler use cases, it may be overkill. If your permission logic could be described by just writing some code (e.g. to check if a Blog is owned by the current User), then consider using voters. A voter is passed the object being voted on, which you can use to make complex decisions and effectively implement your own ACL. Enforcing authorization (e.g. the isGranted part) will look similar to what you see in this entry, but your voter class will handle the logic behind the scenes, instead of the ACL system.

Symfony には 高機能な ACL/ACE がある … が

Page 26: 管理画面のアクセスコントロール

Symfony 的には Custom Voter を作る

http://symfony.com/doc/current/cookbook/security/voters.html

Page 27: 管理画面のアクセスコントロール

やりたいのは ルーティング時にチェックするだけ…

Page 28: 管理画面のアクセスコントロール

シンプルに Routing の規約をチェックする

Listenerを作るという方法でも可能

Page 29: 管理画面のアクセスコントロール

Routing の規約をチェックするListener

Page 30: 管理画面のアクセスコントロール

Controller, Viewは同じような処理でもロールごとに分離

Admin

login.html.twig list.html.twig show.html.twig

SecurityController ArticleController

(Bundle/Resources/views/Admin/)

(Bundle/Controller/Admin/)

User

login.html.twig list.html.twig

SecurityController

(Bundle/Resources/views/User/)

(Bundle/Controller/User/)

ArticleController

Page 31: 管理画面のアクセスコントロール

権限を意識せずに修正が可能

Admin

login.html.twig list.html.twig show.html.twig

(Bundle/Resources/views/Admin/)

User

login.html.twig list.html.twig

(Bundle/Resources/views/User/)

Admin だけ表示する内容を変更しよう

修正

Page 32: 管理画面のアクセスコントロール

まとめ

Good

• ユーザーが見ている画面と全く同じ画面で確認できる • 機能単位で作業分担していてもロールの実装を気にしなくて良い • 仕様変更、追加で権限周りのミスが無い • 権限周りはEventListenerの単体テストをしっかり書けば安心

BAD

• 冗長的なコード • 全ロールに対する修正作業だと修正箇所(ファイル)が多い • security.yml が難しすぎ

Page 33: 管理画面のアクセスコントロール

まとめ

運用しやすい安全な管理画面は ACLがシンプルであること