toeverything/AFFiNE · error · napi::Error

unknown doc role: {role}

Error message

unknown doc role: {role}

What it means

Raised in `parse_doc_role` when a role string does not map to any known DocRole variant ('none'|'external'|'reader'|'commenter'|'editor'|'manager'|'owner'). Permission candidate computation stops with this anyhow error; the faulting input is an unknown doc-role string from the evaluation input.

Source

Thrown at packages/backend/native/src/permission/candidates.rs:35

  match role {
    "external" => Ok(WorkspaceRole::External),
    "member" => Ok(WorkspaceRole::Member),
    "admin" => Ok(WorkspaceRole::Admin),
    "owner" => Ok(WorkspaceRole::Owner),
    _ => anyhow::bail!("unknown workspace role: {role}"),
  }
}

pub(super) fn parse_doc_role(role: &str) -> anyhow::Result<DocRole> {
  match role {
    "none" => Ok(DocRole::None),
    "external" => Ok(DocRole::External),
    "reader" => Ok(DocRole::Reader),
    "commenter" => Ok(DocRole::Commenter),
    "editor" => Ok(DocRole::Editor),
    "manager" => Ok(DocRole::Manager),
    "owner" => Ok(DocRole::Owner),
    _ => anyhow::bail!("unknown doc role: {role}"),
  }
}

pub(super) fn role_name(role: impl Serialize) -> String {
  serde_json::to_value(role)
    .ok()
    .and_then(|value| value.as_str().map(str::to_string))
    .unwrap_or_default()
}

fn active_workspace_role(input: &PermissionEvaluationInputV1) -> anyhow::Result<Option<WorkspaceRole>> {
  let Some(role) = input.workspace.role.as_deref() else {
    if input.workspace.local && input.subject.allow_local {
      return Ok(Some(WorkspaceRole::Owner));
    }
    if input.workspace.public && sharing_enabled(input, None) {
      return Ok(Some(WorkspaceRole::External));
    }

View on GitHub (pinned to 591f874dad)

Solutions

  1. Map the role string to a known doc role before evaluation.
  2. Fix the caller to pass a valid role.
Defensive patterns

Strategy: validation

When it happens

Trigger: Raised when permission evaluation input contains a doc role string other than none, external, reader, commenter, editor, manager, or owner.

Common situations: A caller passed an unrecognized doc role. Validate role strings against the supported DocRole values before calling evaluate_permission.


AI-assisted analysis of toeverything/AFFiNE@591f874dad (2026-08-18). Data as JSON: /api/errors/7c4349f4ae174749. Report an issue: GitHub.