解せぬ日記

雑な話をする

ロールベースアクセス制御を試せるサンプルを書いた

世の中には便利最高なサイトが存在していて、 SaaSやるにあたっての用意したほうがよい機能群を網羅したサイトがある。

www.enterpriseready.io

その中で権限管理に関する言及もあって、RBAC(ロールベースアクセス制御)について書かれている。RBACに関してはググれば出てくるので割愛するが、割とこういったスタンダードな実装をしてるケースは個人的な体感ではあまり出会ったことがなくて、組織やロールで権限を判断する実装とかをよく見かける。ロールで権限を判断する実装というのは、例えばManagerというロールだったらこのオペレーションの実行を許可するみたいな感じ。僕自身もそういった実装をしたことがあるが、そういう実装だと割と自由度が低く、すこしイレギュラーなケースではもにょる実装をしてしまうことになりがちだった。RBACで実装しておくと色々応用が効くので便利だと思う。GCPAWSの権限管理とかもRBACがベースになっている感じがする。

ということで基本となるRBACのプリミティブな実装をRubyで用意して色々実験できると捗るなと思ってそういうサンプルを書いてみた。データベースにおける登場人物は以下のような感じ。

  • Users
  • Roles
  • Permissions
  • RolesとPermissionsの交差テーブル(中間テーブル)

あくまでこれらのテーブルはプリミティブな実装にすぎず、テーブルを追加することでユーザーが複数のチームに所属して、チーム毎にメンバーのロールを変えたいとかって要件を表現できるようになる。この辺の詳しい解説はいくらでもあるので、そっちに任せることにする。

サンプルではMarioがAdmin、PeachがManager、LuigiがMemberみたいな感じにしていて、Roleを管理する権限を前提にMarioはRoleのCRUDができる、PeachはRoleのDができないだけ、LuigiはRoleのRができるみたいな感じになってる。

正直Rails界隈ではcancancanみたいなライブラリもあるので、わざわざサンプル書いたことをブログにアウトプットして価値あるのかなとも思うけど、RBACを色々試したい人にとっては参考になるかなと思って筆をとった。

Rubyでの実装を試すruby-sandoxという個人のリポジトリ内にコードがあり、余計なコードまでcloneされるので覚悟してほしい。ぶっちゃけ僕の怠慢です。すいません。

github.com

よければ試してみてください。何か僕が間違っていればぜひフィードバックがほしいので、よろしくお願いします。