Skip to main content

Permissions

Raven Docs uses a hierarchical permission model to control access to your content.

Permission Hierarchy​

Permissions cascade down but can be overridden at each level.

Workspace Roles​

RoleDescription
OwnerFull control, can delete workspace
AdminManage members, settings, all content
EditorCreate/edit content, cannot change settings
ViewerRead-only access to permitted content

Assigning Workspace Roles​

  1. Go to Settings → Members
  2. Click on a member
  3. Select their role
  4. Save changes
await client.workspaces.changeMemberRole({
workspaceId: 'ws_123',
userId: 'user_456',
role: 'editor',
});

Space Permissions​

Spaces can have their own permission settings:

Visibility​

SettingDescription
PublicAll workspace members can access
PrivateOnly explicitly added members

Space Roles​

RolePermissions
AdminFull control of space, manage members
EditorCreate/edit pages in this space
ViewerRead-only access to this space

Setting Space Permissions​

// Make space private
await client.spaces.update({
workspaceId: 'ws_123',
spaceId: 'space_456',
visibility: 'private',
});

// Add member to space
await client.spaces.addMember({
workspaceId: 'ws_123',
spaceId: 'space_456',
userId: 'user_789',
role: 'editor',
});

Page Permissions​

Individual pages can override space permissions:

Permission Levels​

  • Inherit - Use space permissions (default)
  • Custom - Set specific permissions for this page

Use Cases​

  • Private page in a public space
  • Shared page in a private space
  • Different access levels for specific users
await client.pages.setPermissions({
pageId: 'page_123',
workspaceId: 'ws_456',
permissions: [
{ userId: 'user_111', role: 'editor' },
{ userId: 'user_222', role: 'viewer' },
],
});

Groups​

Create groups to manage permissions at scale:

Creating Groups​

  1. Go to Settings → Groups
  2. Click Create Group
  3. Name the group (e.g., "Engineering Team")
  4. Add members
const group = await client.groups.create({
workspaceId: 'ws_123',
name: 'Engineering Team',
});

await client.groups.addMember({
workspaceId: 'ws_123',
groupId: 'group_456',
userId: 'user_789',
});

Assigning Group Permissions​

Apply permissions to entire groups:

await client.spaces.updatePermissions({
workspaceId: 'ws_123',
spaceId: 'space_456',
targetId: 'group_789',
role: 'editor',
isGroup: true,
});

External Sharing​

Share content with people outside your workspace:

  1. Click Share on any page
  2. Enable Public Link
  3. Configure options:
    • Password protection
    • Expiration date
    • Download permissions
  4. Copy and share the link

Guest Access​

For frequent external collaborators:

  1. Invite as guest (limited access)
  2. Grant access to specific spaces
  3. Guests see limited UI

Security Best Practices​

Principle of Least Privilege​

  • Start with viewer access
  • Upgrade to editor only when needed
  • Reserve admin for those who need it

Regular Audits​

Schedule periodic permission reviews:

  1. Monthly: Review new members' access
  2. Quarterly: Audit space permissions
  3. Annually: Full access review

Sensitive Content​

For highly sensitive information:

  1. Create a private space
  2. Limit membership explicitly
  3. Disable external sharing
  4. Enable audit logging (Enterprise)

Permission Scenarios​

Scenario 1: Department Wiki​

Scenario 2: Executive Documents​

Scenario 3: Client Documentation​

Scenario 4: Onboarding​

API Reference​

// Get space members
const members = await client.spaces.members({
workspaceId: 'ws_123',
spaceId: 'space_456',
});

// Update permissions
await client.spaces.updatePermissions({
workspaceId: 'ws_123',
spaceId: 'space_456',
targetId: 'user_789',
role: 'editor',
});

// Remove member
await client.spaces.removeMember({
workspaceId: 'ws_123',
spaceId: 'space_456',
userId: 'user_789',
});