Skip to content

Roles & Permissions

TendSocial implements role-based access control (RBAC) at the company level.

Default Roles

RoleDescriptionSystem?Mutable?
ownerFull control, billing accessYesNo
adminManage team, settingsYesPermissions only
managerApprove content, view analyticsYesPermissions only
memberCreate content, limited accessYesPermissions only
viewerRead-only accessYesPermissions only

API Endpoints

GET /api/roles

List all roles for the company.

typescript
// Response
[{
  id: string,
  name: string,
  description: string | null,
  isCustom: boolean,
  isSystem: boolean,
  permissions: string[]
}]

POST /api/roles

Create a custom role.

typescript
// Request
{
  name: string,
  description?: string,
  permissions: string[]
}

PUT /api/roles/:id

Update a role (permissions, name, description).

Note: System roles cannot have their core properties changed, but permissions may be editable.

DELETE /api/roles/:id

Delete a custom role.

Note: System roles (isSystem: true) cannot be deleted.

Permission Keys

Standard permission keys used in the system:

PermissionDescription
content:createCreate posts, campaigns
content:editEdit any content
content:deleteDelete content
content:publishPublish to social accounts
content:approveApprove pending content
analytics:viewView analytics dashboard
analytics:exportExport analytics data
team:manageInvite/remove team members
team:rolesManage roles and permissions
settings:companyEdit company settings
settings:billingAccess billing settings
integrations:manageConnect/disconnect platforms

Frontend Integration

typescript
// usePermissions hook
const { hasPermission } = usePermissions();

if (hasPermission('content:approve')) {
  // Show approval button
}

Database Schema

prisma
model CompanyRole {
  id          String   @id @default(cuid())
  companyId   String
  name        String
  description String?
  permissions String[]
  isCustom    Boolean  @default(true)
  isSystem    Boolean  @default(false)
  createdAt   DateTime @default(now())
  updatedAt   DateTime @updatedAt
}

model User {
  role      String   @default("member")
  roleId    String?  // References CompanyRole
}

TendSocial Documentation