Skip to main content

Permissions & Roles

Fine-grained access control for channels, messages, and workspace features.

Built-in Roles

ChatSDK provides 4 default roles:

RolePermissionsUse Case
ownerFull controlWorkspace/channel creator
adminManage settings, moderateTeam leads
moderatorDelete messages, ban usersCommunity moderators
memberSend messages, reactRegular users

Assign Roles

// Channel role
await sdk.assignChannelRole({
channelId: 'ch-abc123',
userId: 'user-456',
role: 'moderator',
});

// Workspace role
await sdk.assignWorkspaceRole({
workspaceId: 'ws-abc123',
userId: 'user-456',
role: 'admin',
});

Check Permissions

const canDelete = await sdk.checkPermission({
channelId: 'ch-abc123',
userId: 'user-456',
permission: 'messages.delete',
});

if (canDelete) {
await sdk.deleteMessage({ messageId: 'msg-123' });
}

Custom Permissions

await sdk.updateChannelPermissions({
channelId: 'ch-abc123',
permissions: {
'messages.send': ['member', 'moderator', 'admin', 'owner'],
'messages.edit': ['owner_only'], // Only message owner
'messages.delete': ['moderator', 'admin', 'owner'],
'channels.invite': ['admin', 'owner'],
'channels.settings': ['owner'],
},
});

Permission Middleware (React)

function DeleteButton({ message, currentUserId }) {
const { hasPermission } = usePermissions();

const canDelete = hasPermission({
permission: 'messages.delete',
ownerId: message.senderId,
});

if (!canDelete) return null;

return (
<button onClick={() => sdk.deleteMessage({ messageId: message.id })}>
Delete
</button>
);
}

Next Steps