-
Notifications
You must be signed in to change notification settings - Fork 2
Mapper permissions & roles: capability layer with dual Keycloak/Django support #2780
Copy link
Copy link
Closed
Labels
component/apiCore terminology service APICore terminology service APIcomponent/mapperMapping toolsMapping toolssignal/has-dependenciesRelies on other work or external inputsRelies on other work or external inputssignal/high-riskSignificant potential impact if incorrectSignificant potential impact if incorrectsignal/large-scopeAffects multiple areas or systemsAffects multiple areas or systemssignal/well-specifiedClear requirements and acceptance criteriaClear requirements and acceptance criteriastage/triagedAI triage complete — scored and classifiedAI triage complete — scored and classifiedtype/featureNew or improved functionalityNew or improved functionality
Milestone
Description
Activity
Metadata
Metadata
Assignees
Labels
component/apiCore terminology service APICore terminology service APIcomponent/mapperMapping toolsMapping toolssignal/has-dependenciesRelies on other work or external inputsRelies on other work or external inputssignal/high-riskSignificant potential impact if incorrectSignificant potential impact if incorrectsignal/large-scopeAffects multiple areas or systemsAffects multiple areas or systemssignal/well-specifiedClear requirements and acceptance criteriaClear requirements and acceptance criteriastage/triagedAI triage complete — scored and classifiedAI triage complete — scored and classifiedtype/featureNew or improved functionalityNew or improved functionality
Replace the hardcoded Mapper group checks with a permission/capability layer that behaves identically in standalone (Django-only) and Keycloak-integrated deployments. OCL supports both permanently — this is not a migration.
Today the Mapper is gated by group names in code:
mapper-approved/mapper-waitlist(oclapi2/core/concepts/views.py:1041,1064),isInWaitlist()(oclmap/src/common/utils.js:1125),mapper_ai_assistant(ocl-ai-assistant/core/match/views.py:101,194). Roles and tiers must be data, so new roles need no code change.ACs
mapper.use,mapper.ai_assistant,mapper.custom_algorithms,mapper.org_projects. Roles bundle permissions; roles assign to groups and users.core/common/backends.py:69,80callsuser.set_groups(claims.get('groups', []))on every OIDC login, replacing the whole Django group set — verify and document the real behaviour before anything relies on it.GET /user/exposes the capability set (consumed by the Mapper UI and the usage page)is_mapper_approved/is_mapper_waitlistedgroup checks retiredTo decide during implementation
Out of scope: TBv3 permissions, tier roles, per-repo/per-project permissions (#2763).
Approach doc:
ocl-workspace/mapper/2026-09-15-mapper-public-preview-approach.md(WP1). Caps and ledger: #2762 · epic OpenConceptLab/ocl_online#133