🎃
権限制御はSQLですべきだと思う理由
良くないと思う実装
- あるオペレーションを行う権限があるかどうかをチェックするため、DBを参照
- 権限がなかった場合、エラーを表すコードを返却
- 権限があった場合、DBにクエリを発行し、成功を表すコード等を返却
なぜ上記の実装が良くないと思うか
- 1.時点で参照したDBの状態と、3.時点で変更を加えるDBの状態が同じとは限らない
- 通信は1回で済ませた方がお得
ではどうするか
例えば、TODOアプリを作っていたとする。
「TODOを削除できるのは、TODOを作った本人のみである」という要件があったとする。
その場合に、TODOを削除するクエリは下記のようにすればいい。
DELETE FROM todos WHERE id=:id AND creation_account_id=:accountId
リクエストをしているアカウントのIDが、TODOを作成したアカウントのIDと一致しなければ、DELETEの結果は0件になり、そうでない場合は1件になる。
削除件数が0件なら404、1件なら200を返すことができる。
ロールが絡む場合などあると思うが、良ければ下記の記事を参考にしてほしい。
Discussion