github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/ui/app/abilities/client.js (about)

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