ProficientNowTechRFCs

8. Permission Model

RFC-DEVELOPER-PLATFORM-0001                                       Section 8
Category: Standards Track                               Permission Model

8. Permission Model

← TechDocs | Index | Next: Database Provisioning →


8.1 Capability-Based Authorization

8.1.1 Core Principle

Per Invariant 2, the portal MUST use capability-based UI rendering. Users see only actions they are permitted to perform:

Traditional ModelCapability-Based Model
Show all optionsShow permitted options only
Block on attemptNever show unauthorized
"Access Denied" errorsNo error scenarios
Runtime authorizationCompile-time visibility

8.1.2 Design Rationale

BenefitDescription
Simplified UXUsers not confused by unavailable options
Reduced errorsNo permission-denied scenarios
Security enforcementAuthorization through visibility
Clear capabilitiesUsers understand what they can do

8.1.3 Implementation Approach


8.2 Keycloak Token Integration

8.2.1 Token Claims

Per Invariant 3, permission decisions MUST derive from Keycloak token claims:

ClaimPurposeSource
groupsAzure AD group membershipsAzure AD sync
realm_access.rolesKeycloak realm rolesKeycloak assignment
resource_access.{client}.rolesClient-specific rolesKeycloak assignment
teamsCustom team attributeCustom mapper

8.2.2 Claim Hierarchy

8.2.3 Keycloak Client Configuration

The developer portal Keycloak client requires specific configuration:

SettingValue
Client IDdeveloper-portal
Access TypeConfidential
Protocolopenid-connect
Required Claimsgroups, email, preferred_username

8.3 Permission Rules

8.3.1 Permission Types

Permission TypeDescriptionExample
Resource permissionAction on catalog entitycatalog.entity.read
Action permissionExecute scaffolder actionscaffolder.template.execute
Feature permissionAccess to featurejit-access.request

8.3.2 Permission Conditions

Permissions MAY include conditions:

Condition TypeDescription
OwnershipUser's team owns the entity
Team membershipUser belongs to required team
EnvironmentLimited to specific environments
RoleUser has specific role

8.3.3 Permission Rules

PermissionConditionEffect
catalog.entity.readAuthenticatedAll users can read catalog
catalog.entity.writeOwnershipOnly owners can modify
scaffolder.template.executeTemplate ACLPer-template permissions
jit-access.requestAuthenticatedAll users can request
jit-access.approveApprover roleOnly approvers can approve

8.4 UI Filtering Pattern

8.4.1 Component Filtering

UI components filter based on permissions:

Component TypeFiltering
Navigation itemsHide inaccessible routes
Action buttonsHide unauthorized actions
Menu itemsShow permitted options only
Entity viewsFilter by read permission

8.4.2 Filter Flow

8.4.3 Caching

Permission decisions MAY be cached:

AspectConfiguration
Cache durationToken lifetime
Cache invalidationOn token refresh
Cache scopePer-user, per-resource

8.5 Permission Framework Integration

8.5.1 Backstage Permission Framework

Backstage provides a permission framework for:

CapabilityDescription
Permission definitionDeclare required permissions
Policy evaluationEvaluate permission rules
Condition handlingApply contextual conditions
Integration hooksPlugin permission integration

8.5.2 Plugin Requirements

Per Invariant 14, plugins MUST integrate with the permission framework:

RequirementDescription
Declare permissionsPlugins list required permissions
Respect decisionsPlugins honor permission denials
No bypassPlugins cannot circumvent framework

8.5.3 Custom Permission Rules

Organizations MAY define custom permission rules:

Rule TypePurpose
Team-basedPermissions based on team membership
Environment-basedPermissions vary by environment
Time-basedTime-limited permissions

8.6 Authorization Ceiling

8.6.1 RFC-IAM-0001 Integration

Per RFC-IAM-0001 Invariant 1, Azure AD and Keycloak operate as a conjunctive gate:

Azure ADKeycloakResult
AllowAllowAllow
AllowDenyDeny
DenyAllowDeny
DenyDenyDeny

8.6.2 Ceiling Enforcement

The portal MUST NOT grant permissions exceeding the Azure AD ceiling:

ScenarioOutcome
User removed from Azure AD groupPermissions revoked in portal
Keycloak role assigned without Azure AD groupPermission denied
Azure AD group addedKeycloak role enables access

8.6.3 Synchronization

AspectMechanism
Group syncKeycloak syncs Azure AD groups
Sync intervalConfigurable, per RFC-IAM-0001
RevocationAccess removed within sync interval

Document Navigation


End of Section 8 — RFC-DEVELOPER-PLATFORM-0001