233 lines
8.3 KiB
Handlebars
233 lines
8.3 KiB
Handlebars
{{!
|
|
Copyright (c) HashiCorp, Inc.
|
|
SPDX-License-Identifier: MPL-2.0
|
|
}}
|
|
|
|
{{#if @model.isOrg}}
|
|
{{page-title (t 'resources.org.title_plural')}}
|
|
{{page-title @model.displayName}}
|
|
{{/if}}
|
|
|
|
{{#if @model.isProject}}
|
|
{{page-title (t 'resources.org.title_plural')}}
|
|
{{page-title this.scopes.selectedOrg.displayName}}
|
|
{{page-title (t 'resources.project.title_plural')}}
|
|
{{page-title @model.displayName}}
|
|
{{/if}}
|
|
|
|
<Rose::Layout::Sidebar as |sidebarLayout|>
|
|
|
|
{{#if this.session.isAuthenticated}}
|
|
<sidebarLayout.sidebar>
|
|
|
|
{{#if @model.isGlobal}}
|
|
<Rose::Nav::Sidebar @title={{t 'titles.general'}} as |nav|>
|
|
<nav.link @route='scopes.scope.scopes'>
|
|
<Rose::Icon @name='flight-icons/svg/org-16' @size='medium' />
|
|
{{t 'resources.org.title_plural'}}
|
|
</nav.link>
|
|
{{#if (feature-flag 'session-recording')}}
|
|
{{#if
|
|
(can
|
|
'navigate session-recording'
|
|
@model
|
|
collection='session-recordings'
|
|
)
|
|
}}
|
|
<nav.link @route='scopes.scope.session-recordings'>
|
|
<Rose::Icon @name='flight-icons/svg/film-16' @size='medium' />
|
|
{{t 'resources.session-recording.title_plural'}}
|
|
</nav.link>
|
|
{{/if}}
|
|
{{#if
|
|
(can
|
|
'navigate storage-bucket' @model collection='storage-buckets'
|
|
)
|
|
}}
|
|
<nav.link @route='scopes.scope.storage-buckets'>
|
|
<Rose::Icon
|
|
@name='flight-icons/svg/cloud-upload-16'
|
|
@size='medium'
|
|
/>
|
|
{{t 'resources.storage-bucket.title_plural'}}
|
|
</nav.link>
|
|
{{/if}}
|
|
{{/if}}
|
|
{{#if
|
|
(and
|
|
(can 'navigate worker' @model collection='workers')
|
|
(feature-flag 'byow')
|
|
)
|
|
}}
|
|
<nav.link @route='scopes.scope.workers'>
|
|
<Rose::Icon @name='flight-icons/svg/cpu-16' @size='medium' />
|
|
{{t 'resources.worker.title_plural'}}
|
|
</nav.link>
|
|
{{/if}}
|
|
</Rose::Nav::Sidebar>
|
|
{{/if}}
|
|
|
|
{{#if @model.isOrg}}
|
|
<Rose::Nav::Sidebar @title={{t 'titles.general'}} as |nav|>
|
|
{{#if this.session.data.authenticated.isGlobal}}
|
|
<nav.link @route='scopes.scope.scopes' @model='global'>
|
|
<Rose::Icon @name='flight-icons/svg/org-16' @size='medium' />
|
|
{{t 'resources.org.title_plural'}}
|
|
</nav.link>
|
|
{{/if}}
|
|
<nav.link @route='scopes.scope.scopes'>
|
|
<Rose::Icon @name='flight-icons/svg/grid-16' @size='medium' />
|
|
{{t 'resources.project.title_plural'}}
|
|
</nav.link>
|
|
</Rose::Nav::Sidebar>
|
|
{{/if}}
|
|
|
|
{{#if @model.isProject}}
|
|
<Rose::Nav::Sidebar @title={{t 'titles.general'}} as |nav|>
|
|
{{#if this.session.data.authenticated.isGlobal}}
|
|
<nav.link @route='scopes.scope.scopes' @model='global'>
|
|
<Rose::Icon @name='flight-icons/svg/org-16' @size='medium' />
|
|
{{t 'resources.org.title_plural'}}
|
|
</nav.link>
|
|
{{/if}}
|
|
<nav.link @route='scopes.scope.scopes' @model={{@model.scopeID}}>
|
|
<Rose::Icon @name='flight-icons/svg/grid-16' @size='medium' />
|
|
{{t 'resources.project.title_plural'}}
|
|
</nav.link>
|
|
</Rose::Nav::Sidebar>
|
|
{{! TODO: after scope awareness refactor, update groups and roles
|
|
to support project scopes }}
|
|
{{!--
|
|
<Rose::Nav::Sidebar @title={{t "titles.iam"}} as |nav|>
|
|
<nav.link @route="scopes.scope.groups">
|
|
<Rose::Icon
|
|
@name="flight-icons/svg/folder-users-16"
|
|
@size="medium" />
|
|
{{t "resources.group.title_plural"}}
|
|
</nav.link>
|
|
<nav.link @route="scopes.scope.roles">
|
|
<Rose::Icon
|
|
@name="flight-icons/svg/identity-user-16"
|
|
@size="medium" />
|
|
{{t "resources.role.title_plural"}}
|
|
</nav.link>
|
|
</Rose::Nav::Sidebar>
|
|
--}}
|
|
<Rose::Nav::Sidebar @title={{t 'titles.resources'}} as |nav|>
|
|
{{#if (can 'navigate model' @model collection='sessions')}}
|
|
<nav.link @route='scopes.scope.sessions'>
|
|
<Rose::Icon
|
|
@name='flight-icons/svg/entry-point-16'
|
|
@size='medium'
|
|
/>
|
|
{{t 'resources.session.title_plural'}}
|
|
</nav.link>
|
|
{{/if}}
|
|
{{#if (can 'navigate model' @model collection='targets')}}
|
|
<nav.link @route='scopes.scope.targets'>
|
|
<Rose::Icon
|
|
@name='flight-icons/svg/crosshair-16'
|
|
@size='medium'
|
|
/>
|
|
{{t 'resources.target.title_plural'}}
|
|
</nav.link>
|
|
{{/if}}
|
|
{{#if (can 'navigate model' @model collection='host-catalogs')}}
|
|
<nav.link @route='scopes.scope.host-catalogs'>
|
|
<Rose::Icon
|
|
@name='flight-icons/svg/collections-16'
|
|
@size='medium'
|
|
/>
|
|
{{t 'resources.host-catalog.title_plural'}}
|
|
</nav.link>
|
|
{{/if}}
|
|
{{#if (can 'navigate model' @model collection='credential-stores')}}
|
|
<nav.link @route='scopes.scope.credential-stores'>
|
|
<Rose::Icon @name='flight-icons/svg/key-16' @size='medium' />
|
|
{{t 'resources.credential-store.title_plural'}}
|
|
</nav.link>
|
|
{{/if}}
|
|
</Rose::Nav::Sidebar>
|
|
{{/if}}
|
|
|
|
<Rose::Nav::Sidebar @title={{t 'titles.iam'}} as |nav|>
|
|
{{! Users are available only for org/global scopes }}
|
|
{{#unless @model.isProject}}
|
|
{{#if (can 'navigate model' @model collection='users')}}
|
|
<nav.link @route='scopes.scope.users'>
|
|
<Rose::Icon @name='flight-icons/svg/users-16' @size='medium' />
|
|
{{t 'resources.user.title_plural'}}
|
|
</nav.link>
|
|
{{/if}}
|
|
{{/unless}}
|
|
|
|
{{! Groups and roles are available for all scopes }}
|
|
{{#if (can 'navigate model' @model collection='groups')}}
|
|
<nav.link @route='scopes.scope.groups'>
|
|
<Rose::Icon
|
|
@name='flight-icons/svg/folder-users-16'
|
|
@size='medium'
|
|
/>
|
|
{{t 'resources.group.title_plural'}}
|
|
</nav.link>
|
|
{{/if}}
|
|
{{#if (can 'navigate model' @model collection='roles')}}
|
|
<nav.link @route='scopes.scope.roles'>
|
|
<Rose::Icon
|
|
@name='flight-icons/svg/identity-user-16'
|
|
@size='medium'
|
|
/>
|
|
{{t 'resources.role.title_plural'}}
|
|
</nav.link>
|
|
{{/if}}
|
|
|
|
{{! Auth methods are available only for org/global scopes }}
|
|
{{#unless @model.isProject}}
|
|
{{#if (can 'navigate model' @model collection='auth-methods')}}
|
|
<nav.link @route='scopes.scope.auth-methods'>
|
|
<Rose::Icon @name='flight-icons/svg/lock-16' @size='medium' />
|
|
{{t 'resources.auth-method.title_plural'}}
|
|
</nav.link>
|
|
{{/if}}
|
|
{{/unless}}
|
|
</Rose::Nav::Sidebar>
|
|
|
|
{{#if @model.isOrg}}
|
|
{{#if this.session.data.authenticated.isGlobal}}
|
|
<Rose::Nav::Sidebar @title={{t 'titles.settings'}} as |nav|>
|
|
<nav.link @route='scopes.scope.edit'>
|
|
{{t 'resources.org.messages.settings.title'}}
|
|
</nav.link>
|
|
</Rose::Nav::Sidebar>
|
|
{{/if}}
|
|
{{/if}}
|
|
|
|
{{#if @model.isProject}}
|
|
<Rose::Nav::Sidebar @title={{t 'titles.settings'}} as |nav|>
|
|
<nav.link @route='scopes.scope.edit'>
|
|
{{t 'resources.project.messages.settings.title'}}
|
|
</nav.link>
|
|
</Rose::Nav::Sidebar>
|
|
{{/if}}
|
|
|
|
</sidebarLayout.sidebar>
|
|
{{/if}}
|
|
|
|
<sidebarLayout.body>
|
|
<main>
|
|
{{outlet}}
|
|
</main>
|
|
</sidebarLayout.body>
|
|
<sidebarLayout.footer>
|
|
<Rose::Footer as |footer|>
|
|
<footer.text>{{app-name}}</footer.text>
|
|
<footer.nav as |nav|>
|
|
<nav.link @href={{(doc-url)}}>
|
|
{{t 'titles.documentation'}}
|
|
</nav.link>
|
|
</footer.nav>
|
|
<footer.brand @logo='logo-company' @text={{(company-name)}} />
|
|
<footer.text>{{company-copyright}}</footer.text>
|
|
</Rose::Footer>
|
|
</sidebarLayout.footer>
|
|
</Rose::Layout::Sidebar> |