Open3
権限管理について考える

実現したいこと
以下の単位で権限を管理したい。
- ユーザー単位
- グループ単位(ユーザーが所属するグループ)
- デザイナー
- エンジニア
- ロール単位
- オーナー
- メンバー
- ゲスト
制約
- 権限は個別で付与、剥奪が可能
- 権限には優先順位がある
- ユーザー、グループ、ロールの順で優先

権限についての考え方
以下の記事がとても良かった
以下の方式があるらしい
- 管理者フラグ形式
- 最もシンプルな管理者か否かの判定のみ
- 管理者の場合は特定の操作が行えるみたいなイメージ
- ACL(Access Control List)
- ユーザーに個別に操作権限を付与
- RBAC(Role Based Access Control)
- ユーザーにロールを付与し、ロールに対して操作権限を付与
- ABAC(Attribute Based Access Control)
- ユーザーの「部署」「役職」などの属性に対して操作権限を付与
今回やりたいこととしては全てを組み合わせた内容になりそう

Ruby on Railsの場合
Gemで良さそうなものがありそうなので調べてみる
cancancan
特徴
- 権限の定義をAbilityクラスに集約し、シンプルで柔軟な権限管理を実現
- ロールベース、ユーザーベース、条件付きの権限設定が可能
- 画面からの権限付与・剥奪も比較的容易に実装可能
- ActiveRecordとの親和性が高く、Railsアプリケーションに自然に組み込むことができる
Pundit
特徴
- ポリシーベースの権限管理Gemで、各モデルに対応するポリシーオブジェクトで権限を定義
- シンプルで可読性の高いコードで権限管理を実現できる
- 画面からの権限付与・剥奪も容易に実装できる
- Railsの標準的なパターンに従った設計なので、直感的に理解しやすい
banken
開発止まっていそうなので参考に。