🎮

このユーザーはこの機能が使える、みたいなあれをどう実現するか

に公開
4

Discussion

にゃーんにゃーん

僕なら『ユーザーにレベルをつけるパターン』にします!

『ユーザーidに直接できることを紐付けるパターン』だと、機能が増えるたびにDBをいじる必要がある や この権限変えた方がいいよねというときに既存のレコードを書き直すDB処理をする必要がある などの辛さが出てきます。

『ユーザーにレベルをつけるパターン』にしておき、ユーザーのクラスなどで権限を管理するのは一つの手です。user.can_view? や user.can_delete? などのメソッドを用意しておいて、レベルの値を意識することなく処理できるようにするなど

こうしておけばドキュメントを作らなくてもそのクラスを見れば、どのレベルがどの操作を許されているかが分かるような、、、

あくまでも一意見ですが、、

ハトすけハトすけ

ネココニャンさん、コメントありがとうございます^^

機能が増えるたびにDBをいじる必要がある

ここ確かにそうですね😳 特にどんどん機能を追加していくフェーズだと、度重なるスキーマ変更が開発の邪魔になりそうです。

ユーザーサイドでめちゃくちゃ細かい権限の動的変更が求められない限り、DBで管理するよりも、DBには識別(レベルやロールなど)だけ置いておき、アプリケーション側で対応するほうがよさげです😁

また、ユーザークラスにメソッドごとの使用許可メソッドを作っておき、そのメソッドを呼び出すまえに、必ず使用許可メソッドを契約的に呼び出して権限チェックをする方式、いいですね! こうすれば権限チェックコードがあちこちに散らばらずにコード自体をドキュメントとして使えそうです。

その方針でいこうかなと思います。ありがとうございます😊

スースー
  • ロールにできることを紐付けるパターン
  • ユーザーにレベルをつけるパターン

の下のuserテーブルの表記が崩れているかもです!
下のように書き直せばいけそうですー!
プルリクエストが出せないようなので、コメントにて失礼しますー

userId name roleId
1 bob 1
2 alice 2