メインコンテンツまでスキップ

セキュリティルール

Squid は強力な認可(authorization)機能を提供しており、AI agents、databases、backend functions、APIs などのさまざまな entity へのアクセスを制御できます。これにより、データを保護し、許可されたユーザーだけが特定の操作を実行できるようにできます。

Squid の access control は、TypeScript の関数を使って Squid backend 側で管理されます。ある関数が access control に関するものであることを示すには、1 つ以上の decorator を適用します。decorator とは @ で始まるラベルのことです。たとえば次の関数では、@secureDatabase decorator を使用して、認証済みユーザーのみが built-in database にアクセスできるようにしています。

Backend code
  @secureDatabase('all', 'built_in_db') // Decorator marks function as securing a database
allowAccessToBuiltInDb(): boolean {
return this.isAuthenticated();
}

Squid decorators と Squid Backend SDK を使用することで、user roles や permissions などのさまざまな基準に基づいて entity へのアクセスを制限できます。

クライアントが secured entity へのアクセスを試みた際に、authorization function が false を返してユーザーが authorized ではないことを示した場合、クライアントは次の詳細を含む Error を受け取ります。

{
"statusCode": 401,
"message": "UNAUTHORIZED"
}

たとえば、次のコードは、users という collection 内の自分のレコードだけを、指定されたユーザーが read できるようにします。

Backend code
import { secureCollection, SquidService, QueryContext } from '@squidcloud/backend';

type User = { id: string; email: string; age: number };

export class ExampleService extends SquidService {
@secureCollection('users', 'read')
secureUsersRead(context: QueryContext<User>): boolean {
const userAuth = this.getUserAuth();
if (!userAuth) {
return false;
}
const userId = userAuth.userId;
return context.isSubqueryOf('id', '==', userId);
}
}

この security 機能に基づき、次の query を実行しようとするクライアントはエラーになります。これは、この関数がユーザー本人のものではない複数の user record へアクセスしようとするためです。

Client code
// This function will throw an error
async function readAllUsers(squid: Squid): Promise<User[]> {
return await squid.collection<User>('users').query().snapshot();
}

詳細

個々の機能における access controls について詳しくは、以下のドキュメントを参照してください。