sql モジュールとユーザーグループと権限のテーブル構成

モジュールとユーザーグループでいわゆる...CRUDの設定をしたい

作成日:2024-11-20, 更新日:2024-11-20

テーブル構成案

CRUDだけで良いと思ってたけど、将来的なコトを考えると色々と必要っぽい

  • 基本的な権限の設定
  • ステータスの権限設定 - 何のステータスに変更することが可能か?
  • フィールドの権限設定 - 対象モジュール(ページ)の中で特定のフィールドに対する権限

基本的な権限の設定

  • モジュール名
  • ユーザーグループ
  • CRUDの各権限
  • I/O(input/output)の各権限: importとexportの対応
  • ステータスの変更権限: 真偽値

例)テーブルのカラム名

  • module
  • usergroup
  • permission_crud - bit演算。C=1,R=2,U=4,D=8
  • permission_io - bit演算。import=1,export=2
  • flg_change_status - 可=1,不可=0

SQLサンプル

permission_crud、permission_ioの各権限で真偽値表示

select
  module,
  usergroup,
  CASE WHEN (permission_crud & 1) > 0 THEN 1 ELSE 0 END AS is_create,
  CASE WHEN (permission_crud & 2) > 0 THEN 1 ELSE 0 END AS is_read,
  CASE WHEN (permission_crud & 4) > 0 THEN 1 ELSE 0 END AS is_update,
  CASE WHEN (permission_crud & 8) > 0 THEN 1 ELSE 0 END AS is_delete,
  CASE WHEN (permission_io & 1) > 0 THEN 1 ELSE 0 END AS is_import,
  CASE WHEN (permission_io & 2) > 0 THEN 1 ELSE 0 END AS is_export,
  flg_change_status
from xxxx

ステータスの権限設定

ステータスの詳細を設定したくなったらテーブル追加が良さげ...

  • モジュール名
  • ステータス名: 承認、公開、下書き...など
  • ユーザーグループ
  • 有効・無効: 真偽値

例)テーブルのカラム名

  • module
  • status_name
  • usergroup
  • is_allowed - 可=1,不可=0

フィールドの権限設定(編集権限の設定?)

フィールド単位で設定したくなったテーブル追加が良さげ...
→実際に必要になったときにCRUDでいくのか、CRUDのU限定でいくのか検討

  • モジュール名
  • フィールド名
  • ユーザーグループ
  • CRUDの各権限 - 作成(c)、削除(d)を使うことは無いと思うけど…一応

例)テーブルのカラム名

  • module
  • field_name
  • usergroup
  • permission_crud - bit演算。C=1,R=2,U=4,D=8