2018-04-03 14:16:57 +00:00
|
|
|
{{#if (or (eq policyType "acl") (has-feature "Sentinel"))}}
|
2018-06-12 21:06:37 +00:00
|
|
|
<PageHeader as |p|>
|
|
|
|
<p.levelLeft>
|
|
|
|
<h1 class="title is-3">
|
|
|
|
{{uppercase policyType}} Policies
|
|
|
|
{{#unless (eq policyType "acl")}}
|
|
|
|
<span class="tag" aria-label="Enforcement level: {{model.enforcementLevel}}">
|
|
|
|
Sentinel
|
|
|
|
</span>
|
|
|
|
{{/unless}}
|
|
|
|
</h1>
|
|
|
|
</p.levelLeft>
|
|
|
|
</PageHeader>
|
2018-11-02 20:17:02 +00:00
|
|
|
{{#if model.meta.total}}
|
2019-02-14 16:04:46 +00:00
|
|
|
<Toolbar>
|
|
|
|
<ToolbarFilters>
|
|
|
|
{{navigate-input
|
|
|
|
filterFocusDidChange=(action "setFilterFocus")
|
|
|
|
filterDidChange=(action "setFilter")
|
|
|
|
filter=filter
|
|
|
|
filterMatchesKey=filterMatchesKey
|
|
|
|
firstPartialMatch=firstPartialMatch
|
|
|
|
extraNavParams=policyType
|
|
|
|
placeholder="Filter policies"
|
|
|
|
mode="policy"
|
|
|
|
}}
|
|
|
|
{{#if filterFocused}}
|
|
|
|
{{#if filterMatchesKey}}
|
|
|
|
<p class="input-hint">
|
|
|
|
<kbd>ENTER</kbd> to go to <code>{{or pageFilter filter}}</code>
|
|
|
|
</p>
|
2018-04-03 14:16:57 +00:00
|
|
|
{{/if}}
|
2019-02-14 16:04:46 +00:00
|
|
|
{{#if firstPartialMatch}}
|
|
|
|
<p class="input-hint">
|
|
|
|
<kbd>TAB</kbd> to complete <code>{{firstPartialMatch.id}}</code>
|
|
|
|
</p>
|
|
|
|
{{/if}}
|
|
|
|
{{/if}}
|
|
|
|
</ToolbarFilters>
|
|
|
|
<ToolbarActions>
|
2019-04-29 15:19:03 +00:00
|
|
|
<ToolbarLink
|
|
|
|
@type="add"
|
2019-02-14 16:04:46 +00:00
|
|
|
@params={{array 'vault.cluster.policies.create'}}
|
2019-04-29 15:19:03 +00:00
|
|
|
@data-test-policy-create-link=true
|
2019-02-14 16:04:46 +00:00
|
|
|
>
|
|
|
|
Create {{uppercase policyType}} policy
|
2019-04-29 15:19:03 +00:00
|
|
|
</ToolbarLink>
|
2019-02-14 16:04:46 +00:00
|
|
|
</ToolbarActions>
|
|
|
|
</Toolbar>
|
2018-04-03 14:16:57 +00:00
|
|
|
{{#each model as |item|}}
|
|
|
|
{{#if (eq item.id "root")}}
|
2018-07-10 13:55:28 +00:00
|
|
|
<div class="list-item-row is-flex" data-test-policy-item>
|
2018-04-03 14:16:57 +00:00
|
|
|
{{i-con
|
|
|
|
glyph='file'
|
|
|
|
size=14
|
|
|
|
class="has-text-grey-light"
|
|
|
|
}}
|
|
|
|
<div>
|
2018-07-10 13:55:28 +00:00
|
|
|
<span class="has-text-weight-semibold has-text-grey" data-test-policy-name>
|
|
|
|
{{item.id}}
|
|
|
|
</span>
|
2018-04-03 14:16:57 +00:00
|
|
|
<p class="help has-text-grey">
|
2018-07-10 13:55:28 +00:00
|
|
|
The <code>root</code> policy does not contain any rules but can
|
|
|
|
do anything within Vault. It should be used with extreme care.
|
2018-04-03 14:16:57 +00:00
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
{{else}}
|
2018-07-10 19:38:02 +00:00
|
|
|
{{#linked-block
|
2018-04-03 14:16:57 +00:00
|
|
|
"vault.cluster.policy.show"
|
|
|
|
policyType
|
|
|
|
item.id
|
2018-07-10 19:38:02 +00:00
|
|
|
class="list-item-row"
|
2018-04-03 14:16:57 +00:00
|
|
|
data-test-policy-link=item.id
|
|
|
|
}}
|
|
|
|
<div class="columns is-mobile">
|
|
|
|
<div class="column is-10">
|
2018-08-16 17:48:24 +00:00
|
|
|
{{#link-to "vault.cluster.policy.show" policyType item.id
|
2018-04-03 14:16:57 +00:00
|
|
|
class="has-text-black has-text-weight-semibold"
|
2018-08-16 17:48:24 +00:00
|
|
|
data-test-policy-item=true
|
|
|
|
}}{{i-con
|
2018-04-03 14:16:57 +00:00
|
|
|
glyph='file'
|
|
|
|
size=14
|
|
|
|
class="has-text-grey-light"
|
|
|
|
}}<span class="is-underline" data-test-policy-name>{{item.id}}</span>
|
2018-08-16 17:48:24 +00:00
|
|
|
{{/link-to}}
|
2018-04-03 14:16:57 +00:00
|
|
|
</div>
|
|
|
|
<div class="column has-text-right">
|
|
|
|
{{#popup-menu name="policy-nav"}}
|
|
|
|
<nav class="menu">
|
|
|
|
<ul class="menu-list">
|
|
|
|
{{#if item.updatePath.isPending}}
|
|
|
|
<li class="action">
|
2018-11-09 18:04:58 +00:00
|
|
|
<button disabled type="button" class="link button is-loading is-transparent">
|
2018-04-03 14:16:57 +00:00
|
|
|
loading
|
|
|
|
</button>
|
|
|
|
</li>
|
|
|
|
<li class="action">
|
2018-11-09 18:04:58 +00:00
|
|
|
<button disabled type="button" class="link button is-loading is-transparent">
|
2018-04-03 14:16:57 +00:00
|
|
|
loading
|
|
|
|
</button>
|
|
|
|
</li>
|
|
|
|
{{else}}
|
|
|
|
{{#if item.canRead}}
|
|
|
|
<li class="action">
|
2018-08-16 17:48:24 +00:00
|
|
|
{{#link-to "vault.cluster.policy.show" policyType item.id data-test-policy-link="show"}}
|
2018-04-03 14:16:57 +00:00
|
|
|
Details
|
2018-08-16 17:48:24 +00:00
|
|
|
{{/link-to}}
|
2018-04-03 14:16:57 +00:00
|
|
|
</li>
|
|
|
|
{{/if}}
|
|
|
|
{{#if item.canEdit}}
|
|
|
|
<li class="action">
|
2018-08-16 17:48:24 +00:00
|
|
|
{{#link-to "vault.cluster.policy.edit" policyType item.id data-test-policy-link="edit"}}
|
2018-04-03 14:16:57 +00:00
|
|
|
Edit
|
2018-08-16 17:48:24 +00:00
|
|
|
{{/link-to}}
|
2018-04-03 14:16:57 +00:00
|
|
|
</li>
|
|
|
|
{{/if}}
|
|
|
|
{{#if item.canDelete}}
|
|
|
|
<li class="action">
|
|
|
|
{{#confirm-action
|
|
|
|
confirmButtonClasses="button is-primary"
|
2018-05-24 23:10:19 +00:00
|
|
|
buttonClasses="link is-destroy"
|
2018-04-03 14:16:57 +00:00
|
|
|
onConfirmAction=(action "deletePolicy" item)
|
|
|
|
confirmMessage=(concat "Are you sure you want to delete " item.id "?")
|
2019-01-09 18:30:19 +00:00
|
|
|
showConfirm=(get this (concat "shouldDelete-" (dot-to-dash item.id)))
|
|
|
|
class=(if (get this (concat "shouldDelete-" (dot-to-dash item.id))) "message is-block is-warning is-outline")
|
2018-04-03 14:16:57 +00:00
|
|
|
containerClasses="message-body is-block"
|
|
|
|
messageClasses="is-block"
|
|
|
|
data-test-policy-delete=item.id
|
|
|
|
}}
|
|
|
|
Delete
|
|
|
|
{{/confirm-action}}
|
|
|
|
</li>
|
|
|
|
{{/if}}
|
|
|
|
{{/if}}
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
|
|
{{/popup-menu}}
|
|
|
|
</div>
|
|
|
|
</div>
|
2018-07-10 19:38:02 +00:00
|
|
|
{{/linked-block}}
|
2018-04-03 14:16:57 +00:00
|
|
|
{{/if}}
|
|
|
|
{{else}}
|
2018-11-02 20:17:02 +00:00
|
|
|
<EmptyState
|
2018-11-14 20:58:33 +00:00
|
|
|
@title="No policies matching "{{pageFilter}}""
|
2018-11-02 20:17:02 +00:00
|
|
|
/>
|
2018-04-03 14:16:57 +00:00
|
|
|
{{/each}}
|
2018-11-28 23:14:42 +00:00
|
|
|
{{#if (gt model.meta.lastPage 1) }}
|
|
|
|
{{list-pagination
|
|
|
|
page=model.meta.currentPage
|
|
|
|
lastPage=model.meta.lastPage
|
|
|
|
link="vault.cluster.policies.index"
|
|
|
|
}}
|
|
|
|
{{/if}}
|
2018-04-03 14:16:57 +00:00
|
|
|
{{else}}
|
2018-11-02 20:17:02 +00:00
|
|
|
<EmptyState
|
|
|
|
@title="No {{uppercase policyType}} policies yet"
|
2018-11-14 23:12:42 +00:00
|
|
|
@message="A list of policies will be listed here. Create your first {{uppercase policyType}} policy to get started."
|
2018-11-14 20:58:33 +00:00
|
|
|
>
|
|
|
|
{{#link-to "vault.cluster.policies.create" class="link"}}
|
2018-11-14 23:12:42 +00:00
|
|
|
Create {{uppercase policyType}} policy
|
2018-11-02 20:17:02 +00:00
|
|
|
{{/link-to}}
|
2018-11-14 20:58:33 +00:00
|
|
|
<LearnLink @path="/vault/getting-started/policies">
|
2019-03-29 23:40:12 +00:00
|
|
|
Learn more
|
2018-11-14 20:58:33 +00:00
|
|
|
</LearnLink>
|
2018-11-02 20:17:02 +00:00
|
|
|
</EmptyState>
|
2018-04-03 14:16:57 +00:00
|
|
|
{{/if}}
|
|
|
|
{{else}}
|
|
|
|
{{upgrade-page title="Sentinel" minimumEdition="Vault Enterprise Premium"}}
|
|
|
|
{{/if}}
|