ui/app/models/roletemplate.js

83 lines
2.0 KiB
JavaScript

import { get, computed } from '@ember/object';
import { inject as service } from '@ember/service';
import Resource from '@rancher/ember-api-store/models/resource';
import C from 'ui/utils/constants';
export default Resource.extend({
router: service(),
roleTemplateService: service('roleTemplate'),
growl: service(),
type: 'roleTemplate',
canClone: true,
state: computed('locked', function() {
return this.locked ? 'locked' : 'active';
}),
isCustom: computed('id', 'roleTemplateId', function() {
return !C.BASIC_ROLE_TEMPLATE_ROLES.includes(this.id);
}),
displayName: computed('name', 'id', function() {
let name = this.name;
if ( name ) {
return name;
}
return `(${ this.id })`;
}),
canRemove: computed('links.remove', 'builtin', function() {
return !!get(this, 'links.remove') && !this.builtin;
}),
actions: {
edit() {
this.router.transitionTo('global-admin.security.roles.edit', this.id);
},
clone() {
this.router.transitionTo('global-admin.security.roles.new', {
queryParams: {
id: this.id,
context: this.context
}
});
}
},
delete() {
const self = this;
const sup = self._super;
const roleTemplateService = this.roleTemplateService
let canDelete = true
const roleNames = []
return roleTemplateService.fetchFilteredRoleTemplates().then((res) => {
const roleTemplates = res.filter((r) => r.canRemove)
roleTemplates.map((r) => {
const { roleTemplateIds = [] } = r;
(roleTemplateIds || []).map((id) => {
if (id === this.id) {
canDelete = false
roleNames.pushObject(r.name)
}
})
})
if (canDelete) {
return sup.apply(self, arguments);
} else {
return this.growl.error(this.intl.t('rolesPage.index.errors.inherited', {
displayName: this.displayName,
roleNames: roleNames.join(','),
}));
}
});
},
});