# Permissions v1 (legacy)

<admonition type="warning">

This page explains how to use Stream's permissions version 1, if you are looking for version 2, go [here](/chat/docs/<framework>/user_permissions/):

</admonition>

<codetabs>

<codetabs-item value="javascript" label="JavaScript">

```js
// To check your permissions version (server side only)
const { app } = await client.getAppSettings();
console.log(app.permission_version);
```

</codetabs-item>

<codetabs-item value="php" label="PHP">

```php
// To check your permissions version (server side only)
$response = $client->getAppSettings();
var_dump($response['app']['permission_version']); // "v1" or "v2"
```

</codetabs-item>

<codetabs-item value="python" label="Python">

```python
# To check your permissions version (server side only)
response = client.get_app_settings()
print(response["app"]["permission_version"]) # "v1" or "v2"
```

</codetabs-item>

<codetabs-item value="java" label="Java">

```java
// To check your permissions version (server side only)
var app = App.get().request();
System.out.println(app.getApp().getPermissionVersion()); // "v1" or "v2"
```

</codetabs-item>

<codetabs-item value="ruby" label="Ruby">

```ruby
# require 'stream-chat'

# To check your permissions version (server side only)
response = client.get_app_settings
puts response['app']['permission_version'] # "v1" or "v2"
```

</codetabs-item>

<codetabs-item value="go" label="Go">

```go
// To check your permissions version (server side only)
conf, _ := c.GetAppConfig(ctx)
fmt.Print(conf.App.PermissionVersion)
```

</codetabs-item>

<codetabs-item value="csharp" label="C#">

```csharp
// To check your permissions version (server side only)
var result = await appClient.GetAppSettingsAsync();
Console.WriteLine(result.App.PermissionVersion); // enum of PermissionVersion.V1 or PermissionVersion.V2
```

</codetabs-item>

<codetabs-item value="unity" label="Unity">

```csharp
// This is a server-side only feature, choose any of our server-side SDKs to use it
```

</codetabs-item>

</codetabs>

In this version, permissions are associated to channel types only. There are 5 channel types which come built-in automatically, which also have default permissions - commerce, livestream, gaming, messaging, and team. These permissions can be customized if needed, and additional channel types can be created with their own separate set of permissions too.

## Permission Checking

Before we dive into more detail on how permission policies are structured, let's explain how permission checking works in general.

<admonition type="info">

Permissions checking only happens on client-side calls. Server-side allows everything so long as a valid API key and secret is provided.

</admonition>

Permission checking is performed taking into account these parameters:

- **API Request** : the action the user is performing (e.g. send a message, edit a message, etc.)
- **User Role:** the role of the user making the request
- **Channel Type:** the channel type
- **Resource** : the resource involved in the API call (e.g. a channel, a message, a user, etc.)
- **Ownership** : whether or not the resource is owned by the user (when applicable)

Every time a user performs an API request the following steps happen:

1. The policies for the channel type are loaded

2. The list of policies is iterated based on priority (highest first)

3. If the policy matches the current request, then the request is either accepted or discarded

4. If there is not match, continue iterating until one policy matches

Here's what a list of permissions look like:

1. Admin users can perform any action

2. Anonymous users are not allowed

3. Users can modify their own messages

4. Users can create channels

5. Members of a channel can read and send messages

6. Anything not matching the previous list should not be allowed

Let's now see how this would play out and introduce a couple of users: Tommaso and Thierry. Tommaso is an admin and Thierry a user. Thierry is also a member of the "Sailing" channel.

1. Thierry posts a message on channel "soccer"

2. Tommaso edits a message from Thierry

3. Thierry creates a channel called "founders"

4. An anonymous user opens the "Sailing" channel

Here's what the outcome of these requests would be:

1. 🙅‍♂️ Only the last policy matches and it denies this action

2. 👌 Tommaso is an admin, 1st policy is a match

3. 👌 Thierry is a user, 4th policy is a match

4. 🙅‍♂️ Anonymous users are discarded

## Permission Policy Structure

Now that we have a better idea about how the permission system works, let's define more precisely the structure of a permission policy.

| Name      | API Name  | Description                                                                                                                                                                                                                                                                                        | Example                          |
| --------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- |
| Name      | name      | The name of the policy, this serves as a human readable placeholder to remember the policy is all about                                                                                                                                                                                            | "Channel Member Permissions"     |
| Resources | resources | The list of resources this policy applies. This field cannot be empty but you can set it to ["*"] if you want to match any resource.                                                                                                                                                               | ["ReadChannel", "CreateMessage"] |
| Roles     | roles     | The list of roles this policy applies. Same as the resources field, this must not be empty and can be set to ["*"] to match any user role.                                                                                                                                                         | ["channel_member"]               |
| Owner     | owner     | This is an optional field that you can use to match actions performed on objects that the user owns. Ownership only applies to some resources like messages and channels. When set to true the policy will only match if the user is owner of the resource part for the request (when applicable). | true                             |
| Action    | action    | The action to perform if the policy matches on resource, role and ownership. This field can either be set to either "Allow" or "Deny".                                                                                                                                                             | 0                                |
| Priority  | priority  | The priority field defined the position of the policy in the list. Permission policies are evaluated in consistent order from the highest priority to the lowest.                                                                                                                                  | 99                               |

### Example list

Let's now write the example from before into a list of real policies.

| Name                                                          | Resources                        | Roles              | Owner | action    | priority |
| ------------------------------------------------------------- | -------------------------------- | ------------------ | ----- | --------- | -------- |
| Admin users can perform any action                            | ["*"]                            | ["admin"]          | -     | 1 (Allow) | 600      |
| Anonymous users are not allowed                               | ["*"]                            | ["anonymous"]      | -     | 0 (Deny)  | 500      |
| Users can modify their own messages                           | ["UpdateMessage"]                | ["user"]           | true  | 1 (Allow) | 400      |
| Users can create channels                                     | ["CreateChannel"]                | ["user"]           | -     | 1 (Allow) | 300      |
| Members of a channel can read and send messages               | ["ReadChannel", "CreateMessage"] | ["channel_member"] | -     | 1 (Allow) | 200      |
| Anything not matching the previous list should not be allowed | ["*"]                            | ["*"]              | -     | 0 (Deny)  | 100      |

<codetabs>

<codetabs-item value="javascript" label="JavaScript">

```js
import { AnyResource, AnyRole, Allow, Deny } from "stream-chat";

const permissions = [
  new Permission(
    "Admin users can perform any action",
    600,
    AnyResource,
    ["admin"],
    false,
    Allow,
  ),
  new Permission(
    "Anonymous users are not allowed",
    500,
    AnyResource,
    ["anonymous"],
    false,
    Deny,
  ),
  new Permission(
    "Users can modify their own messages",
    400,
    ["UpdateMessage"],
    ["user"],
    true,
    Allow,
  ),
  new Permission(
    "Users can create channels",
    300,
    ["CreateChannel"],
    ["user"],
    false,
    Allow,
  ),
  new Permission(
    "Channel Members",
    200,
    ["ReadChannel", "CreateMessage"],
    ["channel_member"],
    false,
    Allow,
  ),
  new Permission("Discard all", 100, AnyResource, AnyRole, false, Deny),
];

await client.updateChannelType("messaging", { permissions });
```

</codetabs-item>

<codetabs-item value="json" label="JSON">

```json
[
  {
    "action": "Allow",
    "name": "Admin users can perform any action",
    "resources": ["*"],
    "roles": ["*"],
    "owner": false,
    "priority": 600
  },
  {
    "action": "Deny",
    "name": "Anonymous users are not allowed",
    "resources": ["*"],
    "roles": ["anonymous"],
    "owner": false,
    "priority": 500
  },
  {
    "action": "Allow",
    "name": "Users can modify their own messages",
    "resources": ["*"],
    "roles": ["user"],
    "owner": true,
    "priority": 400
  },
  {
    "action": "Allow",
    "name": "Users can create channels",
    "resources": ["*"],
    "roles": ["user"],
    "owner": false,
    "priority": 300
  },
  {
    "action": "Allow",
    "name": "Channel Members",
    "resources": ["ReadChannel", "CreateMessage"],
    "roles": ["channel_member"],
    "owner": false,
    "priority": 200
  },
  {
    "action": "Deny",
    "name": "Discard all",
    "resources": ["*"],
    "roles": ["*"],
    "owner": false,
    "priority": 100
  }
]
```

</codetabs-item>

<codetabs-item value="go" label="Go">

```go
resp, err = client.UpdateChannelType(ctx,
	"messaging",
	map[string]interface{}{
		"permissions": []map[string]interface{}{
			{
				"name":   "Admin users can perform any action",
				"priority": 999,
				"resources": []string{"*"},
				"roles":   []string{"admin"},
				"action":  "Allow",
			},
			{
				"name":   "Channel Members",
				"priority": 200,
				"resources": []string{"ReadChannel", "CreateMessage"},
				"roles":   []string{"channel_member"},
				"action":  "Allow",
			},
		},
	},
)
```

</codetabs-item>

<codetabs-item value="csharp" label="C#">

```csharp
await channelTypeClient.UpdateChannelTypeAsync("messaging", new ChannelTypeWithStringCommandsRequest
{
  Permissions = new List<ChannelTypePermission>
  {
    new ChannelTypePermission
    {
      Name = "Admin users can perform any action",
      Priority = 999,
      Resources = new List<string> { "*" },
      Roles = new List<string>{"admin"},
      Action = "Allow"
    },
    new ChannelTypePermission
    {
      Name = "Channel Members",
      Priority = 200,
      Resources = new List<string> { "ReadChannel", "CreateMessage" },
      Roles = new List<string>{"channel_member"},
      Action = "Allow"
    }
  },
});
```

</codetabs-item>

<codetabs-item value="python" label="Python">

```python
client.update_channel_type("messaging", permissions=[
 {
  "action":"Allow",
  "name": "Admin users can perform any action",
  "resources":["*"],
  "roles": ["*"],
  "priority": 999,
 },
 {
  "action":"Allow",
  "name": "Channel Members",
  "resources":["ReadChannel", "CreateMessage"],
  "roles": ["channel_member"],
  "priority": 200,
 }
])
```

</codetabs-item>

<codetabs-item value="php" label="PHP">

```php
client.updateChannelType("messaging", [
 [
  "action" => "Allow",
  "name" => "Admin users can perform any action",
  "resources" => ["*"],
  "roles" => ["*"],
  "priority" => 999
 ],
 [
  "action" => "Allow",
  "name" => "Channel Members",
  "resources" => ["ReadChannel", "CreateMessage"],
  "roles" => ["channel_member"],
  "priority" => 200
 ]
])
```

</codetabs-item>

<codetabs-item value="ruby" label="Ruby">

```ruby
client.update_channel_type('messaging', permissions: [
  {
   action: 'Allow',
   name: 'Admin users can perform any action',
   resources: ['*'],
   roles: ['*'],
   priority: 999
  },
  {
   action: 'Allow',
   name: 'Channel Members',
   resources: %w[ReadChannel CreateMessage],
   roles: ['channel_member'],
   priority: 200
  }
])
```

</codetabs-item>

<codetabs-item value="java" label="Java">

```java
List<PermissionRequestObject> permissions =
  ChannelType.get("messaging").request().getPermissions().stream()
    .map(policy -> PermissionRequestObject.buildFrom(policy))
    .collect(Collectors.toList());

permissions.add(
  PermissionRequestObject.builder()
    .name("Admin users can perform any action")
    .priority(999)
    .resources(Arrays.asList(Resource.ALL))
    .roles(Arrays.asList("*"))
    .action(Action.ALLOW)
    .build());

permissions.add(
  PermissionRequestObject.builder()
    .name("Channel Members")
    .priority(200)
    .resources(Arrays.asList("ReadChannel", "CreateMessage"))
    .roles(Arrays.asList("channel_member"))
    .action(Action.ALLOW)
    .build());

ChannelType.update("messaging").permissions(permissions).request();
```

</codetabs-item>

<codetabs-item value="unity" label="Unity">

```csharp
// This is a server-side only feature, choose any of our server-side SDKs to use it
```

</codetabs-item>

</codetabs>

## User Roles

User Roles are how permissions are grouped together and assigned to a user. Each user role can have separate permissions for different channel types. For example, a moderator for a livestream channel could have different permissions from a moderator for a messaging channel.

Stream maintains a user role for each `user_id` at an Application level and a Channel level. This is to allow flexibility and to cover a wider range of use cases.

### Application User Roles

This is the role assigned to users which applies across the entire application, and gives permissions for things which are outside of a channel's context, for example, being able to create channels, or search for users.

| Role        | Description                                                                                                                                                    | Permissions |
| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| Anonymous   | Does not require a JWT and does not require a user_id registered with Stream                                                                                   | Lowest      |
| Guest       | Does not require a JWT but does require a user_id registered with Stream. Guests can read channels but not post messages                                       | Low         |
| User        | A registered user on the app with a JWT provided by a trusted source (server)                                                                                  | Normal      |
| Moderator   | A registered user with elevated permissions                                                                                                                    | High        |
| Admin       | A registered user with elevated permissions granted from a trusted source (server)                                                                             | High        |
| Server-side | Not technically a user role. This is the client instantiated with the app key and secret. This is the highest level of administration and is run on the server | Highest     |

### Channel User Roles

This is the role assigned to a user once they are added to a channel. This role is unique to that channel and a user could have a different role in each channel which they are a member

| Roles             | Description                                                                                                                  | Permissions |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------- | ----------- |
| channel_member    | A typical member of a channel and the default user role for an Application User                                              | Normal      |
| channel_moderator | Elevated permissions on a channel. Granted to channel members through [this](/chat/docs/<framework>/channel_members/) method | High        |

<admonition type="info">

**Owner** is not an official role, but whoever is the creator of a channel, or a message, gets additional permissions for objects they created versus objects created by someone else, this is managed on the permissions level.

</admonition>

### Change a User Role

<codetabs>

<codetabs-item value="javascript" label="JavaScript">

```js
const update = await serverClient.updateUser({
  id: "tommaso",
  name: "Tommy Doe",
  role: "admin",
});
```

</codetabs-item>

<codetabs-item value="ruby" label="Ruby">

```ruby
client.update_user({
  "id" => "tommaso",
  "name" => "Tommy Doe",
  "role" => "admin",
});
```

</codetabs-item>

<codetabs-item value="python" label="Python">

```python
client.update_user({
  "id": "tommaso",
  "name": "Tommy Doe",
  "role": "admin",
});
```

</codetabs-item>

<codetabs-item value="php" label="PHP">

```php
$response = $client->updateUser([
  'id' => 'tommaso',
  'name' => 'Tommy Doe',
  'role' => 'admin'
]);
```

</codetabs-item>

<codetabs-item value="java" label="Java">

```java
User
 .upsert()
 .user(
  UserRequestObject.builder().id("tommaso").name("Tommy Doe").role("admin").build())
 .request();
```

</codetabs-item>

<codetabs-item value="go" label="Go">

```go
user := User{
  ID: "tommaso",
  Role: "admin",
  ExtraData: map[string]interface{}{
    "name": "Tommy Doe",
  }
};

client.UpdateUser(&user);
```

</codetabs-item>

<codetabs-item value="csharp" label="C#">

```csharp
var user = new UserRequest
{
  Id = "tommaso",
  Name = "Tommy Doe",
  Role = Role.Admin,
};
await userClient.UpsertAsync(user);
```

</codetabs-item>

<codetabs-item value="unity" label="Unity">

```csharp
// This is a server-side only feature, choose any of our server-side SDKs to use it
```

</codetabs-item>

</codetabs>

### Add Moderators to a Channel

<codetabs>

<codetabs-item value="javascript" label="JavaScript">

```js
const channel = serverClient.channel("livestream", "fortnite");
await channel.addModerators(["thierry", "tommaso"]));
```

</codetabs-item>

<codetabs-item value="ruby" label="Ruby">

```ruby
channel = client.channel("livestream", "fortnite");
channel.add_moderators(["thierry", "tommaso"]);
```

</codetabs-item>

<codetabs-item value="python" label="Python">

```python
channel = client.channel("livestream", "fortnite");
channel.add_moderators(["thierry", "tommaso"]);
```

</codetabs-item>

<codetabs-item value="php" label="PHP">

```php
$channel = $client->Channel("livestream", "fortnite");
$channel->create('thierry');

$response = $channel->addModerators(['thierry', 'jenny']);
```

</codetabs-item>

<codetabs-item value="java" label="Java">

```java
Channel.update(
    "livestream",
    "fortnite")
  .addModerators(Arrays.asList("thierry", "tommaso"))
  .request());
```

</codetabs-item>

<codetabs-item value="go" label="Go">

```go
channel = client.Channel("livestream", "fortnite");
channel.AddModerators("thierry", "tommaso");
```

</codetabs-item>

<codetabs-item value="csharp" label="C#">

```csharp
await channelClient.AddModeratorsAsync("livestream", "fortnite", new[] { "thierry", "tommaso" });
```

</codetabs-item>

<codetabs-item value="unity" label="Unity">

```csharp
// This is a server-side only feature, choose any of our server-side SDKs to use it
```

</codetabs-item>

</codetabs>

### Remove Moderators From a Channel

<codetabs>

<codetabs-item value="javascript" label="JavaScript">

```js
await channel.demoteModerators(["thierry"]));
```

</codetabs-item>

<codetabs-item value="ruby" label="Ruby">

```ruby
channel.demote_moderators(["thierry"]);
```

</codetabs-item>

<codetabs-item value="python" label="Python">

```python
channel.demote_moderators(["thierry"]);
```

</codetabs-item>

<codetabs-item value="php" label="PHP">

```php
$channel->demoteModerators(['thierry']);
```

</codetabs-item>

<codetabs-item value="java" label="Java">

```java
Channel.update(
    "livestream",
    "fortnite")
  .demoteModerator("thierry")
  .request());
```

</codetabs-item>

<codetabs-item value="go" label="Go">

```go
channel.DemoteModerators("thierry");
```

</codetabs-item>

<codetabs-item value="csharp" label="C#">

```csharp
await channelClient.DemoteModeratorsAsync("livestream", "fortnite", new[] { "thierry" });
```

</codetabs-item>

<codetabs-item value="unity" label="Unity">

```csharp
// This is a server-side only feature, choose any of our server-side SDKs to use it
```

</codetabs-item>

</codetabs>

### Custom Roles

You can also create custom roles if the built-in roles are not enough to cover all your use cases. This requires an upgrade to Permissions version. Please contact support for help with this upgrade.

## Permission Resources

Permissions policies can match one or more resources. Here is the complete list of permissions available. Please keep in mind that this only applies to API calls done by clients, API requests performed from your backend do not need to pass a permission check.

| Resource                       | Description                                                                                        |
| ------------------------------ | -------------------------------------------------------------------------------------------------- |
| AddLinks                       | Allows add URLs into messages                                                                      |
| AddOwnChannelMembership        | Allows add own channel membership (join channel)                                                   |
| BanUser                        | Allows ban users                                                                                   |
| BlockUser                      | Allows Block and unblock users on calls                                                            |
| CreateCall                     | Allows creates a call                                                                              |
| CreateCallReaction             | Allows Add a reaction to a call                                                                    |
| CreateChannel                  | Allows create a new channel                                                                        |
| CreateDistinctChannelForOthers | Allows create new distinct channel for other users (e.g. user A creates channel for users B and C) |
| CreateMessage                  | Allows send a new message                                                                          |
| CreateReaction                 | Allows add a reaction to a message                                                                 |
| CreateSystemMessage            | Allows send a new system message                                                                   |
| DeleteAttachment               | Allows delete uploaded files and images                                                            |
| DeleteChannel                  | Allows delete a channel                                                                            |
| DeleteMessage                  | Allows delete a message                                                                            |
| DeleteReaction                 | Allows delete a reaction                                                                           |
| DeleteRecording                | Allows Delete recording                                                                            |
| EndCall                        | Allows terminates a call                                                                           |
| JoinBackstage                  | Allows joins a call backstage                                                                      |
| JoinCall                       | Allows joins a call                                                                                |
| JoinEndedCall                  | Allows joins a call that was marked as ended                                                       |
| ListRecordings                 | Allows List recordings                                                                             |
| MuteUsers                      | Allows MuteUsers                                                                                   |
| PinCallTrack                   | Allows Pin/Unpin a track for everyone in the call                                                  |
| PinMessage                     | Allows pin a message                                                                               |
| ReadCall                       | Allows read a call                                                                                 |
| ReadChannel                    | Allows read messages from the channel                                                              |
| ReadChannelMembers             | Allows read channel members                                                                        |
| ReadFlagReports                | Allows read flag reports                                                                           |
| ReadMessageFlags               | Allows access messages that have been flagged                                                      |
| RecreateChannel                | Allows recreate a channel when it got deleted                                                      |
| RemoveCallMember               | Allows Remove a participant                                                                        |
| RemoveOwnChannelMembership     | Allows leave the channel (remove own channel membership)                                           |
| RunMessageAction               | Allows run an action against a message                                                             |
| Screenshare                    | Allows Screenshare                                                                                 |
| SendAudio                      | Allows Send audio                                                                                  |
| SendCustomEvent                | Allows send custom events to a channel                                                             |
| SendEvent                      | Allows SendEvent                                                                                   |
| SendVideo                      | Allows Send video                                                                                  |
| SkipChannelCooldown            | Allows bypass existing cooldown in a channel                                                       |
| SkipMessageModeration          | Allows bypass automatic message moderation                                                         |
| StartBroadcasting              | Allows Start broadcasting                                                                          |
| StartRecording                 | Allows Start recording                                                                             |
| StartTranscription             | Allows Start transcription                                                                         |
| StopBroadcasting               | Allows Stop broadcasting                                                                           |
| StopRecording                  | Allows Stop recording                                                                              |
| StopTranscription              | Allows Stop transcription                                                                          |
| TruncateChannel                | Allows truncate a channel                                                                          |
| UnblockMessage                 | Allows unblock message blocked by automatic moderation                                             |
| UpdateCall                     | Allows update the data for a call                                                                  |
| UpdateCallMember               | Allows Update a participant                                                                        |
| UpdateCallMemberRole           | Allows Update role for participants                                                                |
| UpdateCallPermissions          | Allows UpdateCallPermissions                                                                       |
| UpdateCallSettings             | Allows updates settings of a call                                                                  |
| UpdateChannel                  | Allows update channel data                                                                         |
| UpdateChannelCooldown          | Allows set and unset cooldown time for a channel (slow mode)                                       |
| UpdateChannelFrozen            | Allows freeze and unfreeze a channel                                                               |
| UpdateChannelMembers           | Allows add, modify and remove channel members                                                      |
| UpdateFlagReport               | Allows update flag report                                                                          |
| UpdateMessage                  | Allows update a message                                                                            |
| UploadAttachment               | Allows upload files and images                                                                     |
| UseFrozenChannel               | Allows send messages and reactions to a frozen channels                                            |

## Default Permissions

The five built-in channel types ship with default permission setting.

### messaging

| Resource                       | admin | moderator | user | channel_member | channel_moderator | owner |
| ------------------------------ | ----- | --------- | ---- | -------------- | ----------------- | ----- |
| AddLinks                       | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| AddOwnChannelMembership        | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| BanUser                        | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    |
| BlockUser                      | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| CreateCall                     | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| CreateCallReaction             | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| CreateChannel                  | ✅    | ✅        | ✅   | ✅             | ✅                | ✖️    |
| CreateDistinctChannelForOthers | ✅    | ✅        | ✅   | ✅             | ✅                | ✖️    |
| CreateMessage                  | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| CreateReaction                 | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| CreateSystemMessage            | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    |
| DeleteAttachment               | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✅    |
| DeleteChannel                  | ✅    | ✖️        | ✖️   | ✖️             | ✖️                | ✅    |
| DeleteMessage                  | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✅    |
| DeleteReaction                 | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✅    |
| DeleteRecording                | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| EndCall                        | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| JoinBackstage                  | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| JoinCall                       | ✅    | ✅        | ✖️   | ✅             | ✅                | ✅    |
| JoinEndedCall                  | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| ListRecordings                 | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| MuteUsers                      | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| PinCallTrack                   | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| PinMessage                     | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| ReadCall                       | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| ReadChannel                    | ✅    | ✅        | ✖️   | ✅             | ✅                | ✅    |
| ReadChannelMembers             | ✅    | ✅        | ✖️   | ✅             | ✅                | ✅    |
| ReadFlagReports                | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| ReadMessageFlags               | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    |
| RecreateChannel                | ✅    | ✖️        | ✖️   | ✖️             | ✖️                | ✅    |
| RemoveCallMember               | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| RemoveOwnChannelMembership     | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| RunMessageAction               | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| Screenshare                    | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| SendAudio                      | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| SendCustomEvent                | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| SendEvent                      | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| SendVideo                      | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| SkipChannelCooldown            | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    |
| SkipMessageModeration          | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    |
| StartBroadcasting              | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| StartRecording                 | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| StartTranscription             | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| StopBroadcasting               | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| StopRecording                  | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| StopTranscription              | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| TruncateChannel                | ✅    | ✖️        | ✖️   | ✖️             | ✖️                | ✅    |
| UnblockMessage                 | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    |
| UpdateCall                     | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| UpdateCallMember               | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| UpdateCallMemberRole           | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| UpdateCallPermissions          | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| UpdateCallSettings             | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| UpdateChannel                  | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✅    |
| UpdateChannelCooldown          | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    |
| UpdateChannelFrozen            | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    |
| UpdateChannelMembers           | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✅    |
| UpdateFlagReport               | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| UpdateMessage                  | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✅    |
| UploadAttachment               | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| UseFrozenChannel               | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |

### livestream

| Resource                       | admin | moderator | user | channel_member | channel_moderator | guest | anonymous | owner |
| ------------------------------ | ----- | --------- | ---- | -------------- | ----------------- | ----- | --------- | ----- |
| AddLinks                       | ✅    | ✅        | ✅   | ✅             | ✅                | ✖️    | ✖️        | ✅    |
| AddOwnChannelMembership        | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| BanUser                        | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    | ✖️        | ✖️    |
| BlockUser                      | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| CreateCall                     | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    | ✖️        | ✖️    |
| CreateCallReaction             | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| CreateChannel                  | ✅    | ✅        | ✅   | ✅             | ✅                | ✖️    | ✖️        | ✖️    |
| CreateDistinctChannelForOthers | ✅    | ✅        | ✅   | ✅             | ✅                | ✖️    | ✖️        | ✖️    |
| CreateMessage                  | ✅    | ✅        | ✅   | ✅             | ✅                | ✖️    | ✖️        | ✅    |
| CreateReaction                 | ✅    | ✅        | ✅   | ✅             | ✅                | ✖️    | ✖️        | ✅    |
| CreateSystemMessage            | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    | ✖️        | ✖️    |
| DeleteAttachment               | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    | ✖️        | ✅    |
| DeleteChannel                  | ✅    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| DeleteMessage                  | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    | ✖️        | ✅    |
| DeleteReaction                 | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    | ✖️        | ✅    |
| DeleteRecording                | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| EndCall                        | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| JoinBackstage                  | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| JoinCall                       | ✅    | ✅        | ✅   | ✅             | ✅                | ✅    | ✅        | ✅    |
| JoinEndedCall                  | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| ListRecordings                 | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| MuteUsers                      | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| PinCallTrack                   | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| PinMessage                     | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    | ✖️        | ✅    |
| ReadCall                       | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| ReadChannel                    | ✅    | ✅        | ✅   | ✅             | ✅                | ✅    | ✅        | ✅    |
| ReadChannelMembers             | ✅    | ✅        | ✅   | ✅             | ✅                | ✅    | ✅        | ✅    |
| ReadFlagReports                | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| ReadMessageFlags               | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    | ✖️        | ✖️    |
| RecreateChannel                | ✅    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| RemoveCallMember               | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| RemoveOwnChannelMembership     | ✅    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| RunMessageAction               | ✅    | ✅        | ✅   | ✅             | ✅                | ✖️    | ✖️        | ✅    |
| Screenshare                    | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| SendAudio                      | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| SendCustomEvent                | ✅    | ✅        | ✅   | ✅             | ✅                | ✖️    | ✖️        | ✅    |
| SendEvent                      | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| SendVideo                      | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| SkipChannelCooldown            | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    | ✖️        | ✖️    |
| SkipMessageModeration          | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    | ✖️        | ✖️    |
| StartBroadcasting              | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| StartRecording                 | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| StartTranscription             | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| StopBroadcasting               | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| StopRecording                  | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| StopTranscription              | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| TruncateChannel                | ✅    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| UnblockMessage                 | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    | ✖️        | ✖️    |
| UpdateCall                     | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| UpdateCallMember               | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| UpdateCallMemberRole           | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| UpdateCallPermissions          | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| UpdateCallSettings             | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| UpdateChannel                  | ✅    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| UpdateChannelCooldown          | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    | ✖️        | ✖️    |
| UpdateChannelFrozen            | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    | ✖️        | ✖️    |
| UpdateChannelMembers           | ✅    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| UpdateFlagReport               | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |
| UpdateMessage                  | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    | ✖️        | ✅    |
| UploadAttachment               | ✅    | ✅        | ✅   | ✅             | ✅                | ✖️    | ✖️        | ✅    |
| UseFrozenChannel               | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    | ✖️        | ✖️    |

### team

| Resource                       | admin | moderator | user | channel_member | channel_moderator | owner |
| ------------------------------ | ----- | --------- | ---- | -------------- | ----------------- | ----- |
| AddLinks                       | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| AddOwnChannelMembership        | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| BanUser                        | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    |
| BlockUser                      | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| CreateCall                     | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| CreateCallReaction             | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| CreateChannel                  | ✅    | ✅        | ✅   | ✅             | ✅                | ✖️    |
| CreateDistinctChannelForOthers | ✅    | ✅        | ✅   | ✅             | ✅                | ✖️    |
| CreateMessage                  | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| CreateReaction                 | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| CreateSystemMessage            | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    |
| DeleteAttachment               | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✅    |
| DeleteChannel                  | ✅    | ✖️        | ✖️   | ✖️             | ✖️                | ✅    |
| DeleteMessage                  | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✅    |
| DeleteReaction                 | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✅    |
| DeleteRecording                | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| EndCall                        | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| JoinBackstage                  | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| JoinCall                       | ✅    | ✅        | ✖️   | ✅             | ✅                | ✅    |
| JoinEndedCall                  | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| ListRecordings                 | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| MuteUsers                      | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| PinCallTrack                   | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| PinMessage                     | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| ReadCall                       | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| ReadChannel                    | ✅    | ✅        | ✖️   | ✅             | ✅                | ✅    |
| ReadChannelMembers             | ✅    | ✅        | ✖️   | ✅             | ✅                | ✅    |
| ReadFlagReports                | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| ReadMessageFlags               | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    |
| RecreateChannel                | ✅    | ✖️        | ✖️   | ✖️             | ✖️                | ✅    |
| RemoveCallMember               | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| RemoveOwnChannelMembership     | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| RunMessageAction               | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| Screenshare                    | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| SendAudio                      | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| SendCustomEvent                | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| SendEvent                      | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| SendVideo                      | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| SkipChannelCooldown            | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    |
| SkipMessageModeration          | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    |
| StartBroadcasting              | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| StartRecording                 | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| StartTranscription             | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| StopBroadcasting               | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| StopRecording                  | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| StopTranscription              | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| TruncateChannel                | ✅    | ✖️        | ✖️   | ✖️             | ✖️                | ✅    |
| UnblockMessage                 | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    |
| UpdateCall                     | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| UpdateCallMember               | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| UpdateCallMemberRole           | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| UpdateCallPermissions          | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| UpdateCallSettings             | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| UpdateChannel                  | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✅    |
| UpdateChannelCooldown          | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    |
| UpdateChannelFrozen            | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✖️    |
| UpdateChannelMembers           | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✅    |
| UpdateFlagReport               | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |
| UpdateMessage                  | ✅    | ✅        | ✖️   | ✖️             | ✅                | ✅    |
| UploadAttachment               | ✅    | ✅        | ✖️   | ✅             | ✅                | ✖️    |
| UseFrozenChannel               | ✖️    | ✖️        | ✖️   | ✖️             | ✖️                | ✖️    |

### commerce

| Resource                       | admin | moderator | channel_member | channel_moderator | guest | owner |
| ------------------------------ | ----- | --------- | -------------- | ----------------- | ----- | ----- |
| AddLinks                       | ✅    | ✅        | ✅             | ✅                | ✅    | ✖️    |
| AddOwnChannelMembership        | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| BanUser                        | ✅    | ✅        | ✖️             | ✅                | ✖️    | ✖️    |
| BlockUser                      | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| CreateCall                     | ✅    | ✅        | ✖️             | ✅                | ✖️    | ✖️    |
| CreateCallReaction             | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| CreateChannel                  | ✅    | ✅        | ✅             | ✅                | ✅    | ✖️    |
| CreateDistinctChannelForOthers | ✅    | ✅        | ✅             | ✅                | ✅    | ✖️    |
| CreateMessage                  | ✅    | ✅        | ✅             | ✅                | ✖️    | ✖️    |
| CreateReaction                 | ✅    | ✅        | ✅             | ✅                | ✖️    | ✖️    |
| CreateSystemMessage            | ✅    | ✅        | ✖️             | ✅                | ✖️    | ✖️    |
| DeleteAttachment               | ✅    | ✅        | ✖️             | ✅                | ✖️    | ✅    |
| DeleteChannel                  | ✅    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| DeleteMessage                  | ✅    | ✅        | ✖️             | ✅                | ✖️    | ✅    |
| DeleteReaction                 | ✅    | ✅        | ✖️             | ✅                | ✖️    | ✅    |
| DeleteRecording                | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| EndCall                        | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| JoinBackstage                  | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| JoinCall                       | ✅    | ✅        | ✅             | ✅                | ✖️    | ✅    |
| JoinEndedCall                  | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| ListRecordings                 | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| MuteUsers                      | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| PinCallTrack                   | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| PinMessage                     | ✅    | ✅        | ✖️             | ✅                | ✖️    | ✅    |
| ReadCall                       | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| ReadChannel                    | ✅    | ✅        | ✅             | ✅                | ✖️    | ✅    |
| ReadChannelMembers             | ✅    | ✅        | ✅             | ✅                | ✖️    | ✅    |
| ReadFlagReports                | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| ReadMessageFlags               | ✅    | ✅        | ✖️             | ✅                | ✖️    | ✖️    |
| RecreateChannel                | ✅    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| RemoveCallMember               | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| RemoveOwnChannelMembership     | ✅    | ✅        | ✅             | ✅                | ✖️    | ✖️    |
| RunMessageAction               | ✅    | ✅        | ✅             | ✅                | ✖️    | ✖️    |
| Screenshare                    | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| SendAudio                      | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| SendCustomEvent                | ✅    | ✅        | ✅             | ✅                | ✖️    | ✖️    |
| SendEvent                      | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| SendVideo                      | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| SkipChannelCooldown            | ✅    | ✅        | ✖️             | ✅                | ✖️    | ✖️    |
| SkipMessageModeration          | ✅    | ✅        | ✖️             | ✅                | ✖️    | ✖️    |
| StartBroadcasting              | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| StartRecording                 | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| StartTranscription             | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| StopBroadcasting               | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| StopRecording                  | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| StopTranscription              | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| TruncateChannel                | ✅    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| UnblockMessage                 | ✅    | ✅        | ✖️             | ✅                | ✖️    | ✖️    |
| UpdateCall                     | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| UpdateCallMember               | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| UpdateCallMemberRole           | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| UpdateCallPermissions          | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| UpdateCallSettings             | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| UpdateChannel                  | ✅    | ✅        | ✖️             | ✅                | ✖️    | ✖️    |
| UpdateChannelCooldown          | ✅    | ✅        | ✖️             | ✅                | ✖️    | ✖️    |
| UpdateChannelFrozen            | ✅    | ✅        | ✖️             | ✅                | ✖️    | ✖️    |
| UpdateChannelMembers           | ✅    | ✅        | ✖️             | ✅                | ✖️    | ✅    |
| UpdateFlagReport               | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |
| UpdateMessage                  | ✅    | ✅        | ✖️             | ✅                | ✖️    | ✅    |
| UploadAttachment               | ✅    | ✅        | ✅             | ✅                | ✅    | ✖️    |
| UseFrozenChannel               | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    | ✖️    |

### gaming

| Resource                       | admin | moderator | channel_member | channel_moderator | owner |
| ------------------------------ | ----- | --------- | -------------- | ----------------- | ----- |
| AddLinks                       | ✅    | ✅        | ✅             | ✅                | ✖️    |
| AddOwnChannelMembership        | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| BanUser                        | ✅    | ✅        | ✖️             | ✅                | ✖️    |
| BlockUser                      | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| CreateCall                     | ✅    | ✅        | ✅             | ✅                | ✖️    |
| CreateCallReaction             | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| CreateChannel                  | ✅    | ✖️        | ✖️             | ✖️                | ✖️    |
| CreateDistinctChannelForOthers | ✅    | ✖️        | ✖️             | ✖️                | ✖️    |
| CreateMessage                  | ✅    | ✅        | ✅             | ✅                | ✖️    |
| CreateReaction                 | ✅    | ✅        | ✅             | ✅                | ✖️    |
| CreateSystemMessage            | ✅    | ✅        | ✖️             | ✅                | ✖️    |
| DeleteAttachment               | ✅    | ✅        | ✖️             | ✅                | ✅    |
| DeleteChannel                  | ✅    | ✖️        | ✖️             | ✖️                | ✖️    |
| DeleteMessage                  | ✅    | ✅        | ✖️             | ✅                | ✅    |
| DeleteReaction                 | ✅    | ✅        | ✖️             | ✅                | ✅    |
| DeleteRecording                | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| EndCall                        | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| JoinBackstage                  | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| JoinCall                       | ✅    | ✅        | ✅             | ✅                | ✅    |
| JoinEndedCall                  | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| ListRecordings                 | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| MuteUsers                      | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| PinCallTrack                   | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| PinMessage                     | ✅    | ✅        | ✖️             | ✅                | ✖️    |
| ReadCall                       | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| ReadChannel                    | ✅    | ✅        | ✅             | ✅                | ✖️    |
| ReadChannelMembers             | ✅    | ✅        | ✅             | ✅                | ✖️    |
| ReadFlagReports                | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| ReadMessageFlags               | ✅    | ✅        | ✖️             | ✅                | ✖️    |
| RecreateChannel                | ✅    | ✖️        | ✖️             | ✖️                | ✖️    |
| RemoveCallMember               | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| RemoveOwnChannelMembership     | ✅    | ✅        | ✅             | ✅                | ✖️    |
| RunMessageAction               | ✅    | ✅        | ✅             | ✅                | ✖️    |
| Screenshare                    | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| SendAudio                      | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| SendCustomEvent                | ✅    | ✅        | ✅             | ✅                | ✖️    |
| SendEvent                      | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| SendVideo                      | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| SkipChannelCooldown            | ✅    | ✅        | ✖️             | ✅                | ✖️    |
| SkipMessageModeration          | ✅    | ✅        | ✖️             | ✅                | ✖️    |
| StartBroadcasting              | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| StartRecording                 | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| StartTranscription             | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| StopBroadcasting               | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| StopRecording                  | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| StopTranscription              | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| TruncateChannel                | ✅    | ✖️        | ✖️             | ✖️                | ✖️    |
| UnblockMessage                 | ✅    | ✅        | ✖️             | ✅                | ✖️    |
| UpdateCall                     | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| UpdateCallMember               | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| UpdateCallMemberRole           | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| UpdateCallPermissions          | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| UpdateCallSettings             | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| UpdateChannel                  | ✅    | ✖️        | ✖️             | ✖️                | ✖️    |
| UpdateChannelCooldown          | ✅    | ✅        | ✖️             | ✅                | ✖️    |
| UpdateChannelFrozen            | ✅    | ✅        | ✖️             | ✅                | ✖️    |
| UpdateChannelMembers           | ✅    | ✖️        | ✖️             | ✖️                | ✖️    |
| UpdateFlagReport               | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |
| UpdateMessage                  | ✅    | ✅        | ✖️             | ✅                | ✅    |
| UploadAttachment               | ✅    | ✅        | ✅             | ✅                | ✖️    |
| UseFrozenChannel               | ✖️    | ✖️        | ✖️             | ✖️                | ✖️    |

---

This page was last updated at 2025-08-15T14:14:56.437Z.

For the most recent version of this documentation, visit [https://getstream.io/chat/docs/php/legacy_permissions/](https://getstream.io/chat/docs/php/legacy_permissions/).