{"record":{"id":"7c4349f4ae174749","repo":"toeverything/AFFiNE","slug":"unknown-doc-role-role","errorCode":null,"errorMessage":"unknown doc role: {role}","messagePattern":"unknown doc role: (.+?)","errorType":"validation","errorClass":"napi::Error","httpStatus":null,"severity":"error","filePath":"packages/backend/native/src/permission/candidates.rs","lineNumber":35,"sourceCode":"  match role {\n    \"external\" => Ok(WorkspaceRole::External),\n    \"member\" => Ok(WorkspaceRole::Member),\n    \"admin\" => Ok(WorkspaceRole::Admin),\n    \"owner\" => Ok(WorkspaceRole::Owner),\n    _ => anyhow::bail!(\"unknown workspace role: {role}\"),\n  }\n}\n\npub(super) fn parse_doc_role(role: &str) -> anyhow::Result<DocRole> {\n  match role {\n    \"none\" => Ok(DocRole::None),\n    \"external\" => Ok(DocRole::External),\n    \"reader\" => Ok(DocRole::Reader),\n    \"commenter\" => Ok(DocRole::Commenter),\n    \"editor\" => Ok(DocRole::Editor),\n    \"manager\" => Ok(DocRole::Manager),\n    \"owner\" => Ok(DocRole::Owner),\n    _ => anyhow::bail!(\"unknown doc role: {role}\"),\n  }\n}\n\npub(super) fn role_name(role: impl Serialize) -> String {\n  serde_json::to_value(role)\n    .ok()\n    .and_then(|value| value.as_str().map(str::to_string))\n    .unwrap_or_default()\n}\n\nfn active_workspace_role(input: &PermissionEvaluationInputV1) -> anyhow::Result<Option<WorkspaceRole>> {\n  let Some(role) = input.workspace.role.as_deref() else {\n    if input.workspace.local && input.subject.allow_local {\n      return Ok(Some(WorkspaceRole::Owner));\n    }\n    if input.workspace.public && sharing_enabled(input, None) {\n      return Ok(Some(WorkspaceRole::External));\n    }","sourceCodeStart":17,"sourceCodeEnd":53,"githubUrl":"https://github.com/toeverything/AFFiNE/blob/591f874dad30887a80143a061a44bd3ca7ee3299/packages/backend/native/src/permission/candidates.rs#L17-L53","documentation":"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.","triggerScenarios":"Raised when permission evaluation input contains a doc role string other than none, external, reader, commenter, editor, manager, or owner.","commonSituations":"A caller passed an unrecognized doc role. Validate role strings against the supported DocRole values before calling evaluate_permission.","solutions":["Map the role string to a known doc role before evaluation.","Fix the caller to pass a valid role."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"591f874dad30887a80143a061a44bd3ca7ee3299","analyzedAt":"2026-08-18T21:16:52.546Z","contentChangedAt":"2026-08-18T21:16:52.546Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}