🙆‍♀️

SpiceDBのスキーマパターンのメモ

2022/09/19に公開

SpiceDBで認可制御するときにベースとなるスキーマのパターンをユースケースに合わせてメモ
SpiceDBのスキーマやリレーションは公式のプレイグラウンドで検証できる.
https://play.authzed.com/schema

ロール/グループパターン

ロールに対する認可

基本のパターン

definition user{}

definition document {
  relation reader: user
  relation writer: user

  permission read = reader
  permission write = writer
}

グループに対する認可

definition user{}

definition group {
  relation reader: user
  relation writer: user

  permission read_document = reader + writer
  permission write_document = writer
}

definition document {
  relation reader: user
  relation writer: user
  relation docgroup: group

  permission read = reader + docgroup->read_document
  permission write = writer + docgroup->write_document
}

階層パターン

フォルダの認可

親フォルダの権限を持っているユーザは子フォルダの権限も持つ,というユースケースに対応する場合.

definition user{}

definition folder {
  relation reader: user
  relation writer: user
  relation parent: folder

  permission read = reader + writer + parent->read
  permission write = writer + parent->write
}

フォルダおよびファイルの認可

definition user{}

definition folder {
  relation reader: user
  relation writer: user
  relation parent: folder

  permission read = reader + writer + parent->read
  permission write = writer + parent->write
}

definition file {
  relation reader: user
  relation writer: user
  relation folder: folder
  
  permission read = reader + writer + folder->read
  permission write = writer + folder->write
}

他のユースケースを思いついたら追記する.

Discussion