Railsの権限管理で候補にあがるGemは、CanCanCanとPundit、Bankenの3つ。どのGemを使おうか悩んだときのメモ。

この記事の内容
- Railsの権限管理で候補に上がるGem
 CanCanCanPunditBanken
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を採用することにする