概要 Ruby on Railsにおける複雑な認可の設計と実装するための一例を紹介する。 背景 手元で作っているRailsのB2Bサービスの権限に関連する要件が複雑化してきたので、権限モデルをちょっと整理する。 権限が複雑になる原因は、アクターや操作対象といった権限に関するメトリックが多くなること。要件レベルでどれだけメトリックを減らせるかが重要。 ビジネスで利用するサービスの場合、細かい権限設定が要求されるのでメトリックが増えやすい。 今回扱わなければいけないメトリックは以下 アクター種別 ロール種別 ステータス遷移 Web or APIによる操作 問題 メトリックが3つ以上になった時点で直交表が作成できなくなってしまうため、権限表を作るのが難しくなる。 メトリックが3つであれば、直交表を複数作ればギリギリ対応できる 4つになると表現が厳しい。そもそも理解、暗記、比較も困難。 例えば、W