mirror of https://github.com/rancher/ui.git
106 lines
2.5 KiB
JavaScript
106 lines
2.5 KiB
JavaScript
import Component from '@ember/component';
|
|
import { get, set, observer } from '@ember/object'
|
|
import C from 'ui/utils/constants';
|
|
import layout from './template';
|
|
import { isEmpty } from '@ember/utils';
|
|
|
|
const verbs = C.RULE_VERBS;
|
|
|
|
export default Component.extend({
|
|
layout,
|
|
|
|
rule: null,
|
|
rules: null,
|
|
resource: null,
|
|
nonResourceURL: null,
|
|
apiGroup: null,
|
|
readOnly: null,
|
|
editing: true,
|
|
|
|
tagName: 'TR',
|
|
classNames: 'main-row',
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
const { rule } = this;
|
|
let { rules } = this;
|
|
const {
|
|
resources = [],
|
|
nonResourceURLs = [],
|
|
apiGroups = [],
|
|
} = rule;
|
|
const currentVerbs = get(rule, 'verbs');
|
|
|
|
set(this, 'verbs', verbs.map((verb) => {
|
|
const verbs = currentVerbs ? currentVerbs.indexOf('*') > -1 || currentVerbs.indexOf(verb) > -1 : currentVerbs;
|
|
|
|
return {
|
|
key: verb,
|
|
value: verbs,
|
|
}
|
|
}));
|
|
|
|
if (isEmpty(rules)) {
|
|
rules = C.ROLE_RULES.sort();
|
|
|
|
set(this, 'rules', rules.map((rule) => ({
|
|
label: rule,
|
|
value: rule.toLowerCase(),
|
|
})));
|
|
}
|
|
|
|
if (resources !== null && ( resources || [] ).length > 0) {
|
|
this.initResourceLikeParams(resources, 'resource');
|
|
}
|
|
|
|
if (nonResourceURLs !== null && ( nonResourceURLs || [] ).length > 0) {
|
|
this.initResourceLikeParams(nonResourceURLs, 'nonResourceURL');
|
|
}
|
|
|
|
if (apiGroups !== null && ( apiGroups || [] ).length > 0) {
|
|
this.initResourceLikeParams(apiGroups, 'apiGroup');
|
|
}
|
|
},
|
|
|
|
actions: {
|
|
remove() {
|
|
this.remove(this.rule);
|
|
}
|
|
},
|
|
|
|
verbChanged: observer('verbs.@each.{key,value}', function() {
|
|
const verbs = get(this, 'verbs');
|
|
const selectedVerbs = verbs.filter((verb) => verb.value).map((verb) => verb.key);
|
|
|
|
const rule = get(this, 'rule');
|
|
|
|
set(rule, 'verbs', selectedVerbs)
|
|
}),
|
|
|
|
selectedResourceChanged: observer('resource', function() {
|
|
const rule = get(this, 'rule');
|
|
|
|
set(rule, 'resources', [get(this, 'resource')])
|
|
}),
|
|
|
|
selectedNonResourceUrlChanged: observer('nonResourceURL', function() {
|
|
const rule = get(this, 'rule');
|
|
|
|
set(rule, 'nonResourceURLs', [get(this, 'nonResourceURL')])
|
|
}),
|
|
|
|
apiGroupsChanged: observer('apiGroup', function() {
|
|
const rule = get(this, 'rule');
|
|
|
|
set(rule, 'apiGroups', (get(this, 'apiGroup') || '').split(','))
|
|
}),
|
|
|
|
initResourceLikeParams(rules, resourceName) {
|
|
set(this, resourceName, rules.join(','));
|
|
},
|
|
|
|
remove() {
|
|
throw new Error('remove action is required!');
|
|
}
|
|
});
|