permix について
Permix で権限を実装・保守するためのスキルです。v4 の定義とチェック、フレームワークやサーバー連携、SSR の状態復元、移行、検証を扱い、サーバー側での強制を重視します。
主な機能
- 01Permix v4 API の案内
- 02権限定義とチェック
- 03フレームワーク・サーバー連携
- 04SSR のデハイドレーションとハイドレーション
- 05v3 から v4 への移行案内
- 06型チェックと権限テスト
活用シーン
- 01エンティティ操作のルール定義
- 02サーバーミドルウェアでの権限強制
- 03SSR アプリでの権限状態の復元
- 04Permix v3 からのプロジェクト移行
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dobroslavradosavljevic/ skills --skill permixインストール後、Claude Code で/permixを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/core-api.mdframeworks-ssr.mdmigration-v4.mdserver-integrations.mdsource-map.mdusage-guide.md詳細
Permix
Permix の権限に関わる作業(定義、setup/check、SSR のハイドレーション、UI アダプター、サーバーミドルウェア、NestJS ガード、v3→v4 の移行)では、このスキルを使用してください。
スナップショット:[email protected](2026-10-01 に検証済み)。インストール済みのバージョンが異なる場合は、source-map.md を参照して更新してください。
ワークフロー
- ローカルの Permix の構成を確認します。
- パッケージのバージョン(
[email protected]を推奨。現在の安定版スナップショットは 4.3.0)。 - インポートパス:
permix(コア)とサブパス(permix/react、permix/next、permix/nest、permix/tanstack-startなど)。 - 定義の形式:アクションタプル/
{ name, type, required? }と、従来の v3 の{ action, dataType }。 - 強制適用の実行場所(サーバーミドルウェア/Nest の
@Checkとクライアント UX)および SSR の dehydrate/hydrate の使用有無。
- パッケージのバージョン(
- 日常的な使い方については、まず usage-guide.md に従ってください。
- バージョンに差異がある場合や、移行/SSR/インテグレーションに特化したタスクでは、ドキュメントを更新してください。source-map.md から始めてください。
- 詳細情報の参照先:
- コア API、ルール、check、テンプレート、ReBAC、エラー:core-api.md。
- React/Vue/Solid/Svelte、Next、TanStack Start、ハイドレーション:frameworks-ssr.md。
- Express/Hono/Elysia/Fastify/Node/server/tRPC/oRPC/Nest/Drizzle/Effect:server-integrations.md。
- v3→v4 の破壊的変更:migration-v4.md。
- Permix v4 の API(ドットパス、アクションタプル)を優先してください。クライアント側のチェックは UX のみを目的とし、サーバー側で強制適用してください。
- 型チェックに加え、
setup/checkに焦点を当てたテストで検証してください(サーバーと統合する場合は、ミドルウェアの 403 と Nest のForbiddenExceptionの経路も確認してください)。
コアの判断基準
- フロー:
createPermix<Definition>()→setup(rules)→check('entity.action'[, data])。 - 定義はアクションリスト(文字列、または
{ name, type?, required? })で、必要に応じてツリー状にネストできます。 - ルールは真偽値、または
(data?) => booleanクロージャーです(setup時点のアクターをキャプチャします)。 checkはbooleanを返します。AND/OR にはコールバックを使用し、集約には'~all'/'~any'(または'post.~all')を使用します。- v4 では
checkAsyncは削除されています。await isReadyAsync()の後にcheck()を呼び出してください。 - ルールを設定する前に
check/dehydrateを呼び出すと、falseではなくPermixNotReadyErrorがスローされます。 - 無効なパスでは
PermixRuleNotDefinedErrorがスローされます。 template(...)は関数を返します。呼び出してください:permix.setup(admin())。- SSR:
dehydrate()→ JSON の真偽値(関数はfalseになります)→ クライアント側でhydrate→ 関数ルールを使う場合は必ず再度setup()を呼び出してください。hydrate だけではisReadyは設定されません。 - サーバー:インテグレーションのミドルウェア/Nest の
guard/Next のcache()を使い、リクエストごとにインスタンスを用意することを推奨します。複数のリクエスト間で変更可能なコアのシングルトンを共有しないでください。 - TanStack Start:
setupMiddlewareを使用します(または、コールバックがサーバー専用コードをインポートする場合は、createMiddleware().server(...)内でcreateSetupHandlerを使用します)。ルーターのbeforeLoad/loaderはルーターコンテキスト上の別個のコアインスタンスを使います(UX のみ)。 - NestJS:
permix/nestを使用します。guard()がリクエストごとのルールを設定し、@Checkが強制適用します(フェイルクローズ)。HTTP のみ(Express/Fastify アダプター)。 - セキュリティ:サーバー側での強制適用は必須です。UI を非表示にする用途でのみ、クライアント側のチェックを使用してください。
- エンジン:パッケージが宣言する要件は
node: >=22です。オプションのピア依存関係は、インポートするアダプターに必要なものだけです。
検証
リポジトリが提供するコマンドを優先してください。Permix に関する重要な作業では、該当する項目を確認してください。
- 型チェックのパス(
$inferPath)、required: trueのデータ引数、共有のValidateDefinition/Rules。 - 単体テスト:許可/拒否、データの有無によるエンティティデータルール、
~all/~any、コールバックの合成、未準備/パス不足のエラー。 - SSR:デハイドレートされたスナップショットの形式、クライアントでのハイドレートと再度の
setup、UI でのisReadyによる制御。 - サーバー:
setupMiddlewareの後にcheckMiddlewareを実行し、200 と 403/onForbiddenを検証します。Nest:APP_GUARDと@Check→ 201 と 403、ガードがない場合 →PermixNotFoundError。 - TanStack Start:強制にはサーバー関数の
checkMiddleware/getOrThrow(context)を使用します。beforeLoadでのチェックだけでは不十分です。 - 移行:
check('entity', 'action')、checkAsync、Better Auth プラグイン、entityとactionの UI プロパティが残っていないこと。
実行したチェック、実行しなかったチェック、および未解決のバージョンに関する前提を報告してください。
コメント
Markdown 対応