ワンクリックで
owner-check-rules
「オーナー」「オーナー判定」「オーナーの店舗」「オーナー除外」など、オーナーに関する判定・フィルタリング・権限チェックを行う際に、必ずFIRESTORE.mdでデータベース構造を確認してからusersコレクションで判定するためのルール。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
「オーナー」「オーナー判定」「オーナーの店舗」「オーナー除外」など、オーナーに関する判定・フィルタリング・権限チェックを行う際に、必ずFIRESTORE.mdでデータベース構造を確認してからusersコレクションで判定するためのルール。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
【必須・最優先】GrouMapのFlutter画面作成・画面編集・UI実装・コード修正・機能追加でUI/UXルールを適用するためのガイド。このスキルを発動せずにFlutterコードを1行でも書くことは禁止。「作成して」「修正して」「編集して」「追加して」「実装して」「画面」「ウィジェット」「UI」「UX」「レイアウト」「デザイン」「ボタン」「フォーム」「カード」「リスト」「タブ」「画面の見た目」「図鑑」「マップ」「dart」などのキーワードを含む依頼時に、コードを書く前に必ず最初に発動すること。スタンプ・スタンプカードのUI変更時にも使う。
「画像を生成して」「画像を作って」「アイコンを作って」「バナーを作って」など、画像生成の依頼時に、Nano Banana 2(Gemini 3.1 Flash Image)APIを使って画像を自動生成する。
【必須・最優先】GrouMapのFlutter画面作成・画面編集・UI実装・コード修正・機能追加でUI/UXルールを適用するためのガイド。このスキルを発動せずにFlutterコードを1行でも書くことは禁止。「作成して」「修正して」「編集して」「追加して」「実装して」「画面」「ウィジェット」「UI」「UX」「レイアウト」「デザイン」「ボタン」「フォーム」「カード」「リスト」「タブ」「画面の見た目」「図鑑」「マップ」「dart」などのキーワードを含む依頼時に、コードを書く前に必ず最初に発動すること。スタンプ・スタンプカードのUI変更時にも使う。
「手順書を更新して」「ガイドを整理して」「フェーズが完了したのでマークダウンを整理して」「フェーズが進んだので更新して」「ロードマップを更新して」など、フェーズ進捗に応じてAGENT_TEAM_GUIDE.mdとIMPLEMENTATION_ROADMAP.mdを最新状態に整理する依頼時に使う。
「計画書を作成して」「プランを作って」「設計書を作成して」「計画を立てて」「〇〇の計画書」「〇〇のプラン」など、計画書・設計書・プランの作成を依頼されたときに、/Users/kanekohiroki/Desktop/groumapapp/.claude/plans/ 配下にマークダウンファイルを作成して保存するためのルール。
「バッジ」「バッジ追加」「バッジ削除」「バッジ変更」「バッジ一覧」「バッジ定義」「badge」など、バッジに関するワードが出てきたときに BADGE_LIST.md を参照し、変更があれば追記・修正するためのルール。バッジの追加・削除・名前変更・獲得条件変更・レア度変更・画像パス変更・トリガー実装変更などの場面で使う。
| name | owner-check-rules |
| description | 「オーナー」「オーナー判定」「オーナーの店舗」「オーナー除外」など、オーナーに関する判定・フィルタリング・権限チェックを行う際に、必ずFIRESTORE.mdでデータベース構造を確認してからusersコレクションで判定するためのルール。 |
GrouMapにおける「オーナー」の判定は、usersコレクションのフィールドで行う。storesコレクションのisOwnerフラグは表示制御用であり、オーナー判定のソースではない。
「オーナー」に関する実装(判定・除外・フィルタ・権限チェック等)を行う前に、以下を必ず実施する。
FIRESTORE.md が現在のリポジトリに存在する場合はそれを読む。/Users/kanekohiroki/Desktop/groumapapp/FIRESTORE.md を読む。users コレクションの以下のフィールドを確認する:
isOwner: オーナー判定(全体管理権限)isStoreOwner: 店舗オーナー判定createdStores: オーナーが作成した店舗IDの配列| 判定内容 | 参照先 | フィールド |
|---|---|---|
| ユーザーが全体管理者か | users/{uid} | isOwner == true |
| ユーザーが店舗オーナーか | users/{uid} | isStoreOwner == true |
| ユーザーが特定店舗のオーナーか | users/{uid} | createdStores 配列に該当storeIdが含まれるか |
| オーナーの店舗を除外する | users/{uid} | createdStores 配列に含まれるstoreIdを除外 |
storesコレクションのisOwnerフラグでオーナー判定しない: このフラグはユーザーアプリの表示制御用(isOwner=trueの店舗をマップ等で非表示にする)であり、オーナーの判定ソースではない。店舗用アプリで利用可能なオーナー判定プロバイダー:
userIsAdminOwnerProvider(auth_provider.dart): users/{uid}.isOwner == true を判定userIsOwnerProvider(auth_provider.dart): users/{uid}.isStoreOwner == true を判定function isOwner() {
return request.auth != null &&
get(/databases/$(database)/documents/users/$(request.auth.uid)).data.isOwner == true;
}
function isStoreOwner(storeId) {
return request.auth != null &&
get(/databases/$(database)/documents/users/$(request.auth.uid)).data.isStoreOwner == true &&
get(/databases/$(database)/documents/users/$(request.auth.uid)).data.createdStores.hasAny([storeId]);
}