# FilterOrPolicy

Class for building the FilterPolicy by avoiding union types.

Extends: FilterOrPolicy
Superclass of: Filter, Policy

- Source: [`aws-sns/lib/subscription.ts`](https://github.com/aws/aws-cdk/blob/v2.275.0/packages/aws-cdk-lib/aws-sns/lib/subscription.ts#L375)
- Type last changed: v2.67.0 · 2 Mar 2023

## Example

```ts
import * as lambda from 'aws-cdk-lib/aws-lambda';

const myTopic = new sns.Topic(this, 'MyTopic');
declare const fn: lambda.Function;

// Lambda should receive only message matching the following conditions on message body:
// color: 'red' or 'orange'
// store: property must not be present
myTopic.addSubscription(new subscriptions.LambdaSubscription(fn, {
  filterPolicyWithMessageBody: {
    background: sns.FilterOrPolicy.policy({
      color: sns.FilterOrPolicy.filter(sns.SubscriptionFilter.stringFilter({
        allowlist: ['red', 'orange'],
      })),
    }),
    store: sns.FilterOrPolicy.filter(sns.SubscriptionFilter.notExistsFilter()),
  },
}));
```

## Initializer

```ts
new FilterOrPolicy()
```

## Properties

- `type`: [FilterOrPolicyType](/cdk/api/v2/docs/aws-cdk-lib.aws_sns.FilterOrPolicyType.html) — Type switch for disambiguating between subclasses.

## Methods

- `filter(filter: SubscriptionFilter): Filter` (static) — Filter of MessageBody.

- `isFilter(): boolean` — Check if instance is `Filter` type.

- `isPolicy(): boolean` — Check if instance is `Policy` type.

- `policy(policy: { [key: string]: FilterOrPolicy }): Policy` (static) — Policy of MessageBody.
