𝗦𝘁𝗼𝗽 𝗦𝗮𝗮𝗦 𝗗𝗮𝘁𝗮 𝗟𝗲𝗮𝗸𝘀 𝗶𝗻 𝗟𝗮𝗿𝗮𝘃𝗲𝗹
B2B SaaSを運営しているなら、クライアントのデータを分離して管理しなければなりません。
多くの開発者は、テナントフィルターを手動で追加しています。すべてのクエリに where 句を追加するのです。
これがヒューマンエラーを招きます。レポート作成時に開発者が1行書き忘れただけで、クライアントAがクライアントBのデータを見てしまうことになります。これは致命的な事態です。
Global Query Scopesを使って、これを自動化しましょう。
手順は以下の通りです:
スコープクラスを構築する。このクラスは現在のテナントIDを特定し、すべてのデータベース検索にフィルターを追加します。
Traitを作成する。このTraitはスコープを登録します。また、新しいレコードを作成する際にテナントIDを設定します。
モデルでそのTraitを使用する。これにより、コントローラーをクリーンな状態に保てます。
これでゼロトラスト・レイヤーが構築されます。Invoice::all() のような単純な呼び出しであっても、セキュリティが保たれます。
安全性は設計の一部となります。もはや手動のチェックリストではありません。
Source: https://dev.to/iprajapatiparesh/prevent-saas-data-leaks-automated-eloquent-scopes-in-laravel-f6o