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

Security rules

Squid は、AI agent、database、backend function、API など、さまざまな entity への access を制御する強力な authorization feature を提供します。これにより data を保護し、authorized user のみが特定の action を実行できるようにします。​

Squid の access control は、Squid backend で TypeScript function を使用して管理します。function が access control に関するものであることを示すには、@ で始まる label である decorator を 1 つ以上適用します。たとえば、次の function は @secureDatabase decorator を使用して、authenticated user のみが built-in database に access できるようにします。

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

Squid decorator と Squid Backend SDK を使用すると、user role や permission などのさまざまな criteria に基づいて entity への access を制限できます。

security function は boolean を返します。true は request を許可し、false は拒否します。

client が secured entity に access しようとして、authorization function が user が authorized されていないことを示す false を返すと、client は次の detail を持つ Error を受け取ります。

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

たとえば、次の code は、指定 user のみが users という collection 内の自身の record を 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 functionality に基づき、次の query を実行しようとする client は error を受け取ります。この function は user に属さない複数の user record に access しようとするためです。

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

探索​

個々の feature の access control について詳しくは、以下の documentation を参照してください。