コンテンツにスキップ

検索はプロダクションビルドでのみ利用可能です。 ローカルでテストするには、サイトをビルドしてプレビューしてください。

組織管理

Speakeasy では 組織(Organization) を中心にデータを分離しています。組織は グループ店舗(個別組織) の2種類があり、階層構造を形成します。


種類説明DB 上の metadata
グループ複数店舗を束ねる親組織type: 'group'
店舗(個別)実際の店舗。チャット・連絡先データの所有単位type: 'individual'

  • グループは 1階層 のみ(グループの中にグループは不可)
  • 店舗は 1つのグループ にのみ所属可能(または未所属)
  • 店舗の所属グループは変更可能

Penthouse の組織管理画面から作成します。

Base RPC: createGroup({ name, slug? })
  • slug は自動生成されない場合、名前から生成
  • Vault DB の organization テーブルに type: 'group' で作成

Penthouse の組織管理画面から作成します。

Base RPC: createStore({ cookie, name, groupId?, pureloversShopId, image? })
  1. Vault DB に organization を作成(type: 'individual'
  2. Cellar DB に shop レコードを作成
  3. groupId 指定時は organization.metadataparentId を設定
  4. 作成者を owner ロールで自動追加

店舗(Organization)が全データの所有単位です。ユーザーは Member として組織に所属し、ロールに応じた権限が付与されます。


ユーザーが複数の組織に所属している場合、アクティブ組織を切り替えることで操作対象の店舗を変更します。

// hooks.server.ts での組織情報取得
const session = await platform.env.PROOF.getSession(cookie);
// session.session.activeOrganizationId → 現在の店舗の組織ID

アクティブ組織が設定されていない場合、最初に所属する組織が自動的にアクティブになります。


Proof RPC: addMember({ cookie, userId, organizationId, role })
Base RPC: addMembership({ cookie, organizationId, userId, role })
Proof RPC: removeMember({ cookie, organizationId, memberId })
Base RPC: removeMembership({ cookie, organizationId, memberId })
ロール説明
owner組織オーナー。全権限
admin管理者。メンバー管理・設定変更
member一般メンバー。チャット・連絡先操作
staffスタッフ。閲覧中心の限定権限

詳細は RBAC を参照してください。


Base RPC: updateStoreGroup({ storeId, groupId })

店舗の所属グループを変更します。Vault DB の organization.metadata.parentId を更新します。

Base RPC: deleteGroup({ groupId, cascade? })
  • cascade: false — 子店舗のグループ紐付けを解除してから削除
  • cascade: true — 子店舗も含めて削除(Cellar DB の関連データもカスケード削除)