管理画面のアクセスコントロール
-
Upload
masao-maeda -
Category
Technology
-
view
23 -
download
0
description
Transcript of 管理画面のアクセスコントロール
![Page 1: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/1.jpg)
管理画面 WEBアプリケーション アクセスコントロール
@brtriver(株)VOYAGE GROUP, (株)Zucks
![Page 2: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/2.jpg)
About Me
前田 雅央 @brtriverSymfony ユーザー会 Silex 日本語ドキュメント
![Page 3: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/3.jpg)
https://speakerdeck.com/bash0c7/phpconference2013presentation-number-phpcon2013
![Page 4: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/4.jpg)
管理画面作ったことありますか?
![Page 5: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/5.jpg)
運用しやすい管理画面とは?
![Page 6: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/6.jpg)
permanent link な URL
運用しやすい管理画面
![Page 7: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/7.jpg)
permanent link が無いと…
営業 エンジニア
どのページですか?
../user/articles/list
お客さんは誰…?
お客さんから表示されるはずのデータが見えないという問い合わせが..
![Page 8: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/8.jpg)
ユーザーIDがURLから判別不能BAD
ログイン後のURLが1つだけ 裏でajaxが画面遷移せずがんばりすぎ
無駄にPOSTで画面遷移 確認しようにもパラメータが不明
permanent link が無いと…
![Page 9: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/9.jpg)
営業 エンジニア
お客さんから表示されるはずのデータが見えないという問い合わせが..
URLください
../user/brtriver/articles/list
確認します
permanent link があると…
![Page 10: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/10.jpg)
URLを貰えば同じ画面がみれる
Better
アクセスログからも調査しやすい
permanent link があると…
![Page 11: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/11.jpg)
ACL … Access Control List
運用しやすい管理画面
できるだけシンプルなACL
![Page 12: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/12.jpg)
ロールごとに 機能 制限
user
管理画面
一覧
編集
admin
![Page 13: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/13.jpg)
表示の制限もある
![Page 14: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/14.jpg)
ロールごとに機能 + 表示 制限
user
admin
一覧画面・userの場合はナビを変えたい・userは自身のデータのみ閲覧可 ・編集先リンクはadminのみ表示 ・更新日時はadminのみ表示
![Page 15: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/15.jpg)
Controller で権限ごとの処理…
![Page 16: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/16.jpg)
Viewで権限チェック …
![Page 17: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/17.jpg)
現場はもっと複雑だった
![Page 18: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/18.jpg)
supervisor
ロールが階層になることも
adminA B C
a b cuser
α β γviewer
![Page 19: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/19.jpg)
Symfony2 の chain で解決
![Page 20: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/20.jpg)
ACLでの事故は怖い
営業 エンジニア
管理者(admin)だけ編集できるようにして
修正しました
お客さん(user)の画面でも編集できるんだけど…
ええぇぇ!!!1
![Page 21: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/21.jpg)
Routing
権限チェック
Controller
権限チェック
View
権限チェック
Request Response
権限チェック
Request Response
Admin
User
複雑な 権限チェック パターン
![Page 22: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/22.jpg)
Controller View を
Controller ViewRequest Response
Routing
権限チェック
Controller ViewRequest Response
Admin
User
権限チェック から開放
![Page 23: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/23.jpg)
Routing に規約(prefix)を追加
• ROLE_USER は /user/で始まるパス • ROLE_USER は {user_id} をURLに含むこと
規約
![Page 24: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/24.jpg)
Symfony には 高機能な ACL/ACE がある
http://symfony.com/doc/current/cookbook/security/acl.html
![Page 25: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/25.jpg)
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: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/26.jpg)
Symfony 的には Custom Voter を作る
http://symfony.com/doc/current/cookbook/security/voters.html
![Page 27: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/27.jpg)
やりたいのは ルーティング時にチェックするだけ…
![Page 28: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/28.jpg)
シンプルに Routing の規約をチェックする
Listenerを作るという方法でも可能
![Page 29: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/29.jpg)
Routing の規約をチェックするListener
![Page 30: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/30.jpg)
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: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/31.jpg)
権限を意識せずに修正が可能
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: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/32.jpg)
まとめ
Good
• ユーザーが見ている画面と全く同じ画面で確認できる • 機能単位で作業分担していてもロールの実装を気にしなくて良い • 仕様変更、追加で権限周りのミスが無い • 権限周りはEventListenerの単体テストをしっかり書けば安心
BAD
• 冗長的なコード • 全ロールに対する修正作業だと修正箇所(ファイル)が多い • security.yml が難しすぎ
![Page 33: 管理画面のアクセスコントロール](https://reader033.fdocument.pub/reader033/viewer/2022051411/540d0d467bef0a84278b970b/html5/thumbnails/33.jpg)
まとめ
運用しやすい安全な管理画面は ACLがシンプルであること