open-nomad/ui/app/abilities/job.js

41 lines
1.2 KiB
JavaScript

import AbstractAbility from './abstract';
import { computed } from '@ember/object';
import { or } from '@ember/object/computed';
export default class Job extends AbstractAbility {
@or('bypassAuthorization', 'selfTokenIsManagement', 'policiesSupportRunning')
canRun;
@or(
'bypassAuthorization',
'selfTokenIsManagement',
'policiesSupportRunning',
'policiesSupportScaling'
)
canScale;
// TODO: A person can also see all jobs if their token grants read access to all namespaces,
// but given the complexity of namespaces and policy precedence, there isn't a good quick way
// to confirm this.
@or('bypassAuthorization', 'selfTokenIsManagement')
canListAll;
@or('bypassAuthorization', 'selfTokenIsManagement', 'policiesSupportDispatching')
canDispatch;
@computed('rulesForNamespace.@each.capabilities')
get policiesSupportRunning() {
return this.namespaceIncludesCapability('submit-job');
}
@computed('rulesForNamespace.@each.capabilities')
get policiesSupportScaling() {
return this.namespaceIncludesCapability('scale-job');
}
@computed('rulesForNamespace.@each.capabilities')
get policiesSupportDispatching() {
return this.namespaceIncludesCapability('dispatch-job');
}
}