← デモ入口に戻る
🛡 ロール・権限体系

誰が・何を・どう使えるか

琴平デジタル町民の機能は 3軸のロール で制御されています。 以下にそれぞれのロールの 取得方法・条件・できること を実装仕様そのままで整理しました。

🎯 3軸分離の考え方

Tier(会員ランク)

guest / citizen / premium

ユーザーが「何を使える状態か」。町民登録・プレミアム購入で昇格する。

Staff Role(運営権限)

MEMBER / ORGANIZER / ADMIN / OWNER

「運営側として何を操作できるか」。OWNER が最高権限、MEMBER が一般町民。

Custom Role(特化権限)

shop / events / points …

「特定の仕事だけ任せる」。お店オーナーには shop だけ渡す、など細かく分ける。

Staff Role と Custom Role は 併用可能。たとえば「ADMIN かつ shop も持つ」ことも成立する。

🗾Tier — 会員ランク(ユーザー側)

👋 ゲストゲスト(LINE友だちのみ)

LINE 公式アカウントを友だち追加しただけの状態。まだ琴平デジタル町民ではない。

登録方法
琴平デジタル町民の LINE QR を読むか、URL から友だち追加するだけ。
登録条件
LINE アカウントを持っていること。町外の観光客・未登録者はここ。
付与する側
自動(LINE の follow イベントを受信した時点)
使える機能
リッチメニュー(ゲスト用3タブ)/イベント・お店の閲覧(申込不可)/プレミアム制度の説明ページ
実装上の判定
getMemberTier() が CommunityMember 無し or User.lineUserId 無し のとき 'guest' を返す
🗾 町民琴平デジタル町民

LINE 連携+氏名・住所・生年月日を登録した『琴平デジタル町民』。町の経済循環の主役。

登録方法
ゲスト用リッチメニュー下段の『LINE連携で町民登録』→ LIFF フォームで氏名・住所・生年月日を入力して送信。完了で 100pt 進呈。
登録条件
氏名・住所・生年月日の3項目必須。住所は町内外どちらでも可(町外町民も受け入れる方針)。LINE 連携済みであること。
付与する側
自動(フォーム送信時に CommunityMember + User.lineUserId が作成される)
使える機能
マイページ・残高・履歴/イベント参加とチェックイン/クーポン利用/お店マップ/町内移動 mobi/町民同士のポイント送金(KOTO_10)/プレミアム購入 入口
実装上の判定
getMemberTier() が CommunityMember あり + User.lineUserId あり のとき 'citizen' を返す
👑 プレミアム琴平デジタル町民 プレミアム(住民証NFT保有)

住民証 NFT を保有する上位会員。選挙権・立候補・限定特典などの特別権利を持つ。

登録方法
マイページ →『プレミアムへ』→ Shopify チェックアウトで住民証 NFT を購入。決済確定後、Cardano 上で NFT が発行され、確定通知 webhook 経由で自動的に Entitlement が付与される。
登録条件
まず citizen であること(町民登録済)。住民証 NFT の年額を支払い、Entitlement の sku = 'membership-nft' が ACTIVE 状態であること。
付与する側
自動(Shopify webhook → NftMintRecord(PENDING) → Railway mint queue → 確定 webhook → Entitlement 作成)/運営が手動付与する場合もあり
使える機能
citizen の全機能+プレミアム特典一覧・Discordサロン・限定クーポン・町長選挙の投票権(KOTO_12/13)/将来的に立候補権も
実装上の判定
getMemberTier() が citizen 条件 + Entitlement(sku=membership-nft, source=NFT, status=ACTIVE) あり のとき 'premium' を返す。NFT 発行は非同期のため、決済直後は PENDING/PROCESSING 状態を経て MINTED に遷移する。

🛡運営ロール — 管理者・店舗オーナー側

🏪 お店お店管理者(Custom Role: shop)

お店のオーナー/店員。自店のクーポン発行・注文管理・売上確認ができる。

登録方法
運営(ADMIN)がメンバー管理画面で該当ユーザーに Custom Role『ショップ管理(shop)』を割り当てる。本人側の手続きは不要。
登録条件
琴平コミュニティのメンバー(citizen)であること。お店として登録されており、運営が審査して付与を判断する。
付与する側
コミュニティの ADMIN/OWNER(= 琴平では三好さん・髙木さん)
使える機能
お店管理画面 (KOTO_14) /クーポン発行 (merchant-coupon flow) /自店の注文管理
実装上の判定
CommunityMember.roleId が CustomRole(slug='shop', permissions=['MANAGE_SHOP','MANAGE_ORDERS']) を指す。hasPermission(userId, communityId, 'MANAGE_SHOP') で判定
✨ 運営運営スタッフ(ORGANIZER)

運営スタッフ。イベント運営・メンバー管理などの中核操作ができる(所有権操作は除く)。

登録方法
既存の ADMIN/OWNER がメンバー管理画面で Staff Role を『ORGANIZER』に変更する。
登録条件
コミュニティのメンバー(citizen)であること。運営チームとして信頼できる人物であること。
付与する側
コミュニティの ADMIN/OWNER
使える機能
admin-blast flow(お知らせ配信)/イベントチェックイン受付/メンバー管理の大半(追放や OWNER 変更を除く)
実装上の判定
CommunityMember.role === 'ORGANIZER'。isStaffRole() で ADMIN/OWNER と同等の管理者として扱われる
🛡 管理者管理者(ADMIN)

管理者。ORGANIZER の全権限+メンバー追放・設定変更・ロール付与などの強権を持つ。

登録方法
OWNER がメンバー管理画面で Staff Role を『ADMIN』に変更する(初期メンバーはここで指名)。
登録条件
コミュニティのメンバー(citizen)で、信頼できる運営責任者であること。琴平では三好さん・髙木さんが該当。
付与する側
OWNER(または既存 ADMIN が別 ADMIN を指名するケースもあり)
使える機能
ORGANIZER の全権限+メンバー管理全般・Custom Role 付与(shop を誰に渡すか決める)・コミュニティ設定変更・全監査ログ閲覧
実装上の判定
CommunityMember.role === 'ADMIN'。isAdminOrAbove() で true
👑 オーナーコミュニティオーナー(OWNER)

コミュニティの所有者。最高権限。課金・コミュニティ廃止・所有権移譲ができる。

登録方法
コミュニティ作成時に自動で OWNER。所有権を譲りたい場合は既存 OWNER が別ユーザーに譲渡する(実装は限定的)。
登録条件
通常 1 人。複数 OWNER は技術的には可能だが推奨しない。
付与する側
作成時に自動付与/既存 OWNER による譲渡
使える機能
ADMIN の全権限+コミュニティ廃止・所有権移譲・(将来)課金設定の変更
実装上の判定
CommunityMember.role === 'OWNER'、もしくは Community.ownerOrganizerId === userId(後者は単一オーナー参照)。isOwner() で true

📊機能 × ロール マトリクス

〇 = 操作可能 / △ = 閲覧のみ / 空欄 = アクセス不可。各シーンは KOTO 番号で対応。

KOTOシーン👋 ゲスト🗾 町民👑 プレミアム🏪 お店✨ 運営🛡 管理者👑 オーナー
KOTO_1① LINE友だち追加〜あいさつ〇〇〇————
KOTO_2② リッチメニュー9面〇〇〇————
KOTO_3③ LINE連携〜町民登録〇——————
KOTO_4④ マイページ(会員証・残高)—〇〇————
KOTO_5⑤ イベント一覧・詳細△〇〇————
KOTO_6⑥ イベントチェックイン—〇〇—〇〇—
KOTO_7⑦ お店一覧・クーポン利用△〇〇————
KOTO_8⑧ お店マップ〇〇〇————
KOTO_9⑨ 町内移動(mobi配車)—〇〇————
KOTO_10⑩ 町民どうしでお礼pt送金—〇〇————
KOTO_10B⑩B 未会員にもリンクで贈れる琴デジポイント—〇〇————
KOTO_11⑪ プレミアム購入(Stripe風決済)—〇—————
KOTO_12⑫ プレミアム特典一覧——〇————
KOTO_13⑬ 町長選挙(候補者・投票)△△〇————
KOTO_14⑭ お店オーナー管理画面———〇—〇〇
KOTO_15⑮ スポットワーク(地域版タイミー)—〇〇〇———
KOTO_16⑯ お問い合わせフォーム〇〇〇————

📝 補足

  • 実装の SSoT は src/lib/roles/。 設計書は docs/reference/role-design.md。
  • 琴平コミュニティの Custom Role は既に 7 種投入済み (shop / events / quests / members / points / orders / ops)。 実運用のロール割当はこれから(琴平お店オーナー 11 名に shop を割り当てる等)。
  • 本ページの内容は現時点の実装と同期。変更があれば本ページとrole-design.md を同時更新する。