mirror of https://github.com/rancher/ui.git
83 lines
2.0 KiB
JavaScript
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(','),
|
|
}));
|
|
}
|
|
});
|
|
},
|
|
|
|
});
|