open-vault/ui/app/models/identity/group.js

91 lines
2.7 KiB
JavaScript
Raw Normal View History

import { alias } from '@ember/object/computed';
import { computed } from '@ember/object';
2018-04-03 14:16:57 +00:00
import IdentityModel from './_base';
import DS from 'ember-data';
import lazyCapabilities, { apiPath } from 'vault/macros/lazy-capabilities';
import identityCapabilities from 'vault/macros/identity-capabilities';
2018-04-03 14:16:57 +00:00
const { attr, belongsTo } = DS;
export default IdentityModel.extend({
formFields: computed('type', function() {
let fields = ['name', 'type', 'policies', 'metadata'];
if (this.get('type') === 'internal') {
return fields.concat(['memberGroupIds', 'memberEntityIds']);
}
return fields;
}),
name: attr('string'),
type: attr('string', {
defaultValue: 'internal',
possibleValues: ['internal', 'external'],
}),
creationTime: attr('string', {
readOnly: true,
}),
lastUpdateTime: attr('string', {
readOnly: true,
}),
numMemberEntities: attr('number', {
readOnly: true,
}),
numParentGroups: attr('number', {
readOnly: true,
}),
2018-04-03 14:16:57 +00:00
metadata: attr('object', {
editType: 'kv',
}),
policies: attr({
2018-12-10 16:44:37 +00:00
label: 'Policies',
editType: 'searchSelect',
fallbackComponent: 'string-list',
models: ['policy/acl', 'policy/rgp'],
2018-04-03 14:16:57 +00:00
}),
memberGroupIds: attr({
label: 'Member Group IDs',
2018-12-10 16:44:37 +00:00
editType: 'searchSelect',
fallbackComponent: 'string-list',
models: ['identity/group'],
2018-04-03 14:16:57 +00:00
}),
parentGroupIds: attr({
label: 'Parent Group IDs',
2018-12-10 16:44:37 +00:00
editType: 'searchSelect',
fallbackComponent: 'string-list',
models: ['identity/group'],
}),
2018-04-03 14:16:57 +00:00
memberEntityIds: attr({
label: 'Member Entity IDs',
2018-12-10 16:44:37 +00:00
editType: 'searchSelect',
fallbackComponent: 'string-list',
models: ['identity/entity'],
2018-04-03 14:16:57 +00:00
}),
hasMembers: computed(
'memberEntityIds',
'memberEntityIds.[]',
'memberGroupIds',
'memberGroupIds.[]',
function() {
let { memberEntityIds, memberGroupIds } = this.getProperties('memberEntityIds', 'memberGroupIds');
let numEntities = (memberEntityIds && memberEntityIds.get('length')) || 0;
let numGroups = (memberGroupIds && memberGroupIds.get('length')) || 0;
return numEntities + numGroups > 0;
}
),
alias: belongsTo('identity/group-alias', { async: false, readOnly: true }),
updatePath: identityCapabilities(),
canDelete: alias('updatePath.canDelete'),
canEdit: alias('updatePath.canUpdate'),
aliasPath: lazyCapabilities(apiPath`identity/group-alias`),
canAddAlias: computed('aliasPath.canCreate', 'type', 'alias', function() {
let type = this.get('type');
let alias = this.get('alias');
// internal groups can't have aliases, and external groups can only have one
if (type === 'internal' || alias) {
return false;
}
return this.get('aliasPath.canCreate');
}),
2018-04-03 14:16:57 +00:00
});