{{ 'XP.ModelAccess.AdminTitle' | translate: { Default: 'Model access approvals' } }}
{{ 'XP.ModelAccess.AdminDescription' | translate : { Default: 'Review personal model requests and manage grants in the current tenant or organization scope.' } }}
{{ 'XP.ModelAccess.Search' | translate: { Default: 'User or model' } }} {{ 'XP.ModelAccess.Channel' | translate: { Default: 'Access channel' } }} {{ 'XP.KEY_WORDS.All' | translate: { Default: 'All' } }} @for (channel of channels; track channel) { {{ 'XP.ModelAccess.ChannelValue.' + channel | translate: { Default: channel } }} } {{ 'XP.ModelAccess.ModelType' | translate: { Default: 'Model type' } }} {{ 'XP.KEY_WORDS.All' | translate: { Default: 'All' } }} @for (type of modelTypes; track type) { {{ 'XP.ModelAccess.ModelTypeValue.' + type | translate: { Default: type } }} } {{ 'XP.ModelAccess.Status' | translate: { Default: 'Status' } }} {{ 'XP.KEY_WORDS.All' | translate: { Default: 'All' } }} @for (status of statusOptions(); track status) { {{ 'XP.ModelAccess.StatusValue.' + status | translate }} } {{ 'XP.ModelAccess.ExpiresBefore' | translate: { Default: 'Expires before' } }}
@if (loading()) {
} @else {
@switch (activeTab()) { @case ('requests') {
@for (request of requests(); track request.id) { } @empty { }
{{ 'XP.ModelAccess.Applicant' | translate: { Default: 'Applicant' } }} {{ 'XP.ModelAccess.Model' | translate: { Default: 'Model' } }} {{ 'XP.ModelAccess.Channel' | translate: { Default: 'Access channel' } }} {{ 'XP.ModelAccess.RequestScope' | translate: { Default: 'Request scope' } }} {{ 'XP.ModelAccess.Reason' | translate: { Default: 'Reason' } }} {{ 'XP.ModelAccess.Status' | translate: { Default: 'Status' } }} {{ 'XP.ModelAccess.SubmittedAt' | translate: { Default: 'Submitted at' } }} {{ 'XP.ModelAccess.Actions' | translate: { Default: 'Actions' } }}
{{ request.requesterName || '—' }}
{{ request.modelSnapshot.modelLabel ? (request.modelSnapshot.modelLabel | i18n) : request.model }}
{{ request.modelSnapshot.providerLabel ? (request.modelSnapshot.providerLabel | i18n) : request.provider }} · {{ 'XP.ModelAccess.ModelTypeValue.' + request.modelType | translate: { Default: request.modelType } }}
@if (request.externalModelId) {
API · {{ request.externalModelId }}
}
{{ 'XP.ModelAccess.ChannelValue.' + request.channel | translate: { Default: request.channel } }} {{ 'XP.ModelAccess.Scope.' + request.ownershipScope | translate }}
{{ request.reason }}
{{ 'XP.ModelAccess.StatusValue.' + request.status | translate }} {{ request.createdAt | date: 'medium' }}
@if (canEdit() && request.status === 'requested') { } @else { }
{{ 'XP.ModelAccess.NoAdminRequests' | translate: { Default: 'No requests' } }}
} @case ('grants') {
@for (grant of grants(); track grant.id) { } @empty { }
{{ 'XP.ModelAccess.User' | translate: { Default: 'User' } }} {{ 'XP.ModelAccess.Model' | translate: { Default: 'Model' } }} {{ 'XP.ModelAccess.Channel' | translate: { Default: 'Access channel' } }} {{ 'XP.ModelAccess.RequestScope' | translate: { Default: 'Request scope' } }} {{ 'XP.ModelAccess.Status' | translate: { Default: 'Status' } }} {{ 'XP.ModelAccess.ValidUntilLabel' | translate: { Default: 'Valid until' } }} {{ 'XP.ModelAccess.Availability' | translate: { Default: 'Availability' } }} {{ 'XP.ModelAccess.Actions' | translate: { Default: 'Actions' } }}
{{ grant.userName || '—' }}
{{ grant.modelSnapshot.modelLabel ? (grant.modelSnapshot.modelLabel | i18n) : grant.model }}
{{ grant.modelSnapshot.providerLabel ? (grant.modelSnapshot.providerLabel | i18n) : grant.provider }} · {{ 'XP.ModelAccess.ModelTypeValue.' + grant.modelType | translate: { Default: grant.modelType } }}
@if (grant.externalModelId) {
API · {{ grant.externalModelId }}
}
{{ 'XP.ModelAccess.ChannelValue.' + grant.channel | translate: { Default: grant.channel } }} {{ 'XP.ModelAccess.Scope.' + grant.ownershipScope | translate }} {{ 'XP.ModelAccess.StatusValue.' + grant.status | translate }} @if (grant.validUntil) { {{ formatValidUntil(grant.validUntil) }} } @else { {{ 'XP.ModelAccess.Permanent' | translate: { Default: 'No expiration' } }} } @if (grantUnavailableReason(grant); as unavailableReason) { {{ 'XP.ModelAccess.Unavailable.' + unavailableReason | translate }} } @else { {{ 'XP.ModelAccess.Available' | translate: { Default: 'Available' } }} }
@if (canEdit() && grant.status === 'active') { @if (grant.validUntil) { } } @else { }
{{ 'XP.ModelAccess.NoAdminGrants' | translate: { Default: 'No grants' } }}
} @case ('audit') {
@for (event of events(); track event.id) { } @empty { }
{{ 'XP.ModelAccess.EventType' | translate: { Default: 'Event' } }} {{ 'XP.ModelAccess.Actor' | translate: { Default: 'Actor' } }} {{ 'XP.ModelAccess.Model' | translate: { Default: 'Model' } }} {{ 'XP.ModelAccess.Channel' | translate: { Default: 'Access channel' } }} {{ 'XP.ModelAccess.RequestScope' | translate: { Default: 'Request scope' } }} {{ 'XP.ModelAccess.Details' | translate: { Default: 'Details' } }} {{ 'XP.ModelAccess.OccurredAt' | translate: { Default: 'Occurred at' } }}
{{ 'XP.ModelAccess.Event.' + event.eventType | translate }} {{ event.actorType === 'system' ? ('XP.ModelAccess.SystemActor' | translate: { Default: 'System' }) : event.actorName || '—' }}
{{ event.modelSnapshot.modelLabel ? (event.modelSnapshot.modelLabel | i18n) : event.modelSnapshot.model }}
{{ event.modelSnapshot.providerLabel ? (event.modelSnapshot.providerLabel | i18n) : event.modelSnapshot.provider }} · {{ 'XP.ModelAccess.ModelTypeValue.' + event.modelSnapshot.modelType | translate: { Default: event.modelSnapshot.modelType } }}
@if (event.modelSnapshot.externalModelId) {
API · {{ event.modelSnapshot.externalModelId }}
}
{{ 'XP.ModelAccess.ChannelValue.' + event.channel | translate: { Default: event.channel } }} {{ 'XP.ModelAccess.Scope.' + eventScope(event) | translate }} @if (event.systemReasonCode) { {{ 'XP.ModelAccess.ClosedReason.' + event.systemReasonCode | translate }} } @else if (event.eventType === 'model_suspended' && event.reason) { {{ 'XP.ModelAccess.Unavailable.' + event.reason | translate }} } @else if (event.reason) { {{ event.reason }} } @else { } {{ event.createdAt | date: 'medium' }}
{{ 'XP.ModelAccess.NoAudit' | translate: { Default: 'No audit events' } }}
} } @if (activeTotal()) {
{{ 'XP.ModelAccess.PageSummary' | translate : { current: activePageNumber(), pages: activePageCount(), total: activeTotal() } }}
@let pages = paginationPages();
  • @for (page of pages; track page; let index = $index) { @if (index > 0 && page - pages[index - 1] > 1) {
  • }
  • }
}
}