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
- Map the role string to a known doc role before evaluation.
- 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.