github.com/hernad/nomad@v1.6.112/ui/app/abilities/client.js (about) 1 /** 2 * Copyright (c) HashiCorp, Inc. 3 * SPDX-License-Identifier: MPL-2.0 4 */ 5 6 import AbstractAbility from './abstract'; 7 import { computed, get } from '@ember/object'; 8 import { or } from '@ember/object/computed'; 9 import classic from 'ember-classic-decorator'; 10 11 @classic 12 export default class Client extends AbstractAbility { 13 // Map abilities to policy options (which are coarse for nodes) 14 // instead of specific behaviors. 15 @or('bypassAuthorization', 'selfTokenIsManagement', 'policiesIncludeNodeRead') 16 canRead; 17 18 @or( 19 'bypassAuthorization', 20 'selfTokenIsManagement', 21 'policiesIncludeNodeWrite' 22 ) 23 canWrite; 24 25 @computed('token.selfTokenPolicies.[]') 26 get policiesIncludeNodeRead() { 27 return policiesIncludePermissions(this.get('token.selfTokenPolicies'), [ 28 'read', 29 'write', 30 ]); 31 } 32 33 @computed('token.selfTokenPolicies.[]') 34 get policiesIncludeNodeWrite() { 35 return policiesIncludePermissions(this.get('token.selfTokenPolicies'), [ 36 'write', 37 ]); 38 } 39 } 40 41 function policiesIncludePermissions(policies = [], permissions = []) { 42 // For each policy record, extract the Node policy 43 const nodePolicies = policies 44 .toArray() 45 .map((policy) => get(policy, 'rulesJSON.Node.Policy')) 46 .compact(); 47 48 // Check for requested permissions 49 return nodePolicies.some((policy) => permissions.includes(policy)); 50 }