Open3

権限管理について考える

iwamasaiwamasa

実現したいこと

以下の単位で権限を管理したい。

  • ユーザー単位
  • グループ単位(ユーザーが所属するグループ)
    • デザイナー
    • エンジニア
  • ロール単位
    • オーナー
    • メンバー
    • ゲスト

制約

  • 権限は個別で付与、剥奪が可能
  • 権限には優先順位がある
    • ユーザー、グループ、ロールの順で優先
iwamasaiwamasa

権限についての考え方

以下の記事がとても良かった
https://www.lyricrime.com/posts/access-control/

以下の方式があるらしい

  • 管理者フラグ形式
    • 最もシンプルな管理者か否かの判定のみ
    • 管理者の場合は特定の操作が行えるみたいなイメージ
  • ACL(Access Control List)
    • ユーザーに個別に操作権限を付与
  • RBAC(Role Based Access Control)
    • ユーザーにロールを付与し、ロールに対して操作権限を付与
  • ABAC(Attribute Based Access Control)
    • ユーザーの「部署」「役職」などの属性に対して操作権限を付与

今回やりたいこととしては全てを組み合わせた内容になりそう

iwamasaiwamasa

Ruby on Railsの場合

Gemで良さそうなものがありそうなので調べてみる

cancancan

https://github.com/CanCanCommunity/cancancan

特徴

  • 権限の定義をAbilityクラスに集約し、シンプルで柔軟な権限管理を実現
  • ロールベース、ユーザーベース、条件付きの権限設定が可能
  • 画面からの権限付与・剥奪も比較的容易に実装可能
  • ActiveRecordとの親和性が高く、Railsアプリケーションに自然に組み込むことができる

Pundit

https://github.com/varvet/pundit

特徴

  • ポリシーベースの権限管理Gemで、各モデルに対応するポリシーオブジェクトで権限を定義
  • シンプルで可読性の高いコードで権限管理を実現できる
  • 画面からの権限付与・剥奪も容易に実装できる
  • Railsの標準的なパターンに従った設計なので、直感的に理解しやすい

banken

https://github.com/kyuden/banken

開発止まっていそうなので参考に。