キューの保護
@secureTopic デコレーターは、Apache Kafka のキューを保護し、認証されたユーザーのみがデータストリームメッセージにアクセスできるようにします。
Squid のキュートピックを保護するには、@secureTopic デコレーターを使用し、トピック名とアクションの種類を渡します。次のコードは、'hello-world' トピックに対して、キューへの読み取りおよび書き込みアクセスを許可します:
Backend code
import { SquidService, secureTopic } from '@squidcloud/backend';
export class ExampleService extends SquidService {
  @secureTopic('topic-name', 'all')
  allowTopicAccess(): boolean {
    return true;
  }
}
アクションタイプは、'read'、'write'、または 'all' を指定できます。
トピックメッセージの読み取り保護
トピックメッセージの読み取りを保護する際、セキュリティ関数には、クライアントが読み取りたいトピックメッセージに関する統合IDおよびトピック名が含まれる TopicReadContext が渡されます。以下の例は、'topic-name' トピックに対して、認証済みユーザーのみがトピックメッセージを読み取れるよう保護しています:
Backend code
import { SquidService, secureTopic, TopicReadContext } from '@squidcloud/backend';
@secureTopic('topic-name', 'read')
allowTopicRead(context: TopicReadContext): boolean {
  console.log(context.topicName);
  return this.isAuthenticated();
}
トピックメッセージの書き込み保護
トピックメッセージの書き込みを保護する際、セキュリティ関数には、クライアントが書き込みたいトピックメッセージの配列、および統合IDとトピック名を含む TopicWriteContext<T>(T はメッセージの型)が渡されます。以下の例は、もしメッセージ内に 'bad word' が含まれている場合、書き込みが許可されないようトピックへの書き込みを保護する方法を示しています:
Backend code
import { SquidService, secureTopic, TopicWriteContext } from '@squidcloud/backend';
@secureTopic('topic-name', 'write')
allowTopicWrite(context: TopicWriteContext<T>): boolean {
  console.log(context.topicName);
  for (const message of context.messages) {
    console.log(message);
    if (message.contains('bad word')) {
      return false;
    }
  }
  return true;
}
Apache Kafka または Confluent 統合を使用する場合、デコレーターの3番目のパラメータとして統合IDを指定します。次の例は、統合IDが 'kafka-integration-id' のキューに対するセキュリティ関数を示しています:
Backend code
import { SquidService, secureTopic } from '@squidcloud/backend';
export class ExampleService extends SquidService {
  @secureTopic('topic-name', 'all', 'kafka-integration-id')
  allowTopicAccess(): boolean {
    return true;
  }
}