Railsの権限管理で候補にあがるGemは、CanCanCan
とPundit
、Banken
の3つ。どのGemを使おうか悩んだときのメモ。
この記事の内容
- Railsの権限管理で候補に上がるGem
CanCanCan
Pundit
Banken
CanCanCan
vs Pundit
vs Banken
- CanCanCan
- 独自DSL
- Controller毎に定義していた認可条件をAbilityクラスに集中
- 権限ごとに各リソースとActionに対する認可条件を定義
- Abilityクラスが肥大しがち
- Pundit
- https://github.com/varvet/pundit
- ModelごとにPolicyクラスを作成しActionに対する認可条件を定義
- Model, Policy, Controller が1:1:1という制約あり
- Banken
- ControllerごとにLoyaltyクラスを作成しActionに対する認可条件を定義
- PunditのModelよりな責務をControllerよりに書き換え
DSLであるCanCanCanは学習コストがありそう、肥大しがちとのことなので候補から外した。
Pundit or Banken、どちらにするかで悩む。
Punditを使ってみよう
どちらのgemも直接的な責務は別クラス(Pundit
ならPolicy
クラス、Banken
ならLoyalty
クラス)
Pundit
とBanken
の大きな違いは、Modelに責務をもたせるかControllerに責務をもたせるか
RESTfulなアプリケーションであることを遵守できていれば、Punditの思想であるModelごとに権限が管理できるのが理想となるであろう(Controllerごとである必要はないはず)
そして、スター数が1番多い(2018/5/12現在)ので、Punditを採用することにする