bankenの思想を読み解く
2017-04-18
kyuden/banken: Simple and lightweight authorization library for Rails
https://github.com/kyuden/banken
認可ロジックの居場所を整理するため、bankenの導入を検討するにあたり、READMEを読んで思想を理解したい。
認可に関するgemといえば他にCanCanCanやPunditがあるが、これらのgemとの比較は作者の方がしてくれている。
まぁ読んでくださいという感じ。
僕の視点で再整理する(あくまで僕の視点なので指摘や意見などください)。
- 要するに「認可」とは3つの要素に紐付いている
- ユーザ(の持つ権限)
- Controller/Action
- Resource
- 故に、認可ロジックの置き場は散らかりやすい
- 認可gemはこれを整理するため、各々、3要素のどれか1つを整理の起点に定めている
- CanCanCan -> ユーザ(の持つ権限)
- Pundit -> Resource
- banken -> Controller/Action
で、どれが良いかという議論は難しい。
どれを取っても、「<起点にしなかった要素>が複雑になると認可ロジックが荒れるよね」という議論ができる。
例えば上のスライドには「Punditの場合、1つのResourceが複数のControllerから管理されている場合ややこしくなる」という話が書いてあるが、同じように「bankenの場合、1つのActionが複数のResourceを管理している場合ややこしくなる」と言えてしまうわけだ。なので、「じゃあ実際、どれが一番起こりにくそうですか?」レベルの比較しかできない。
そういう意味で、「これを選ぶべき」という積極的な選択は今のところできなそうだ、というのが所感。
じゃあなぜbankenを選ぼうとしているかというと、1つ、bankenが合いそうだという理由がある。今の開発チームには「ディレクター」と呼んでいる役割の人がチームにいるということ。この場合は、「この画面は、この人にしか見れない」といったように、Controller/Actionを起点にする考え方が、もっとも理解が容易なのではないか、と思っている。