From bb873b5ed90e8396e742e377da54d3060a1daacc Mon Sep 17 00:00:00 2001 From: Neil MacDougall Date: Mon, 27 Feb 2023 11:52:15 +0000 Subject: [PATCH] Fix issue where standard user can not add cluster members --- .../components/form-members/component.js | 28 +++++++++++++++++++ .../components/form-members/template.hbs | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/shared/addon/components/form-members/component.js b/lib/shared/addon/components/form-members/component.js index 4da264558..939dbf4f5 100644 --- a/lib/shared/addon/components/form-members/component.js +++ b/lib/shared/addon/components/form-members/component.js @@ -25,6 +25,7 @@ export default Component.extend({ showCreator: true, toAddCustom: null, _bindings: null, + canAddMember: false, init() { this._super(...arguments); @@ -34,6 +35,19 @@ export default Component.extend({ if (this.registerHook) { this.registerHook(this.saveMembers.bind(this), 'saveMembers'); } + + // memberConfig.type indicates the membership type being used (e.g. cluserrolebinding); + const memberConfig = get(this, 'memberConfig'); + + if (memberConfig && memberConfig.type) { + const schema = get(this, 'globalStore').getById('schema', memberConfig.type.toLowerCase()); + + if (schema && schema.collectionMethods) { + const canAddMember = (schema.collectionMethods || []).includes('POST'); + + set(this, 'canAddMember', canAddMember); + } + } }, actions: { @@ -72,6 +86,20 @@ export default Component.extend({ return get(this, 'users').sortBy('displayName'); }), + // Look at whether the user can update the member type resource + // If not, fallback to previous mechanism - must be more than 1 local user + canAddUser: computed('filteredUsers', 'access.provider', function () { + const filteredUsers = get(this, 'filteredUsers') || []; + const provider = get(this, 'access.provider'); + const canAddMember = get(this, 'canAddMember'); + + if (canAddMember || provider !== 'local') { + return true; + } + + return filteredUsers.length > 1; + }), + buildUpdateList(resource) { let bindings = set(this, 'currentBindings', get(resource, 'roleTemplateBindings')); diff --git a/lib/shared/addon/components/form-members/template.hbs b/lib/shared/addon/components/form-members/template.hbs index 22b7c1376..d2a69c10b 100644 --- a/lib/shared/addon/components/form-members/template.hbs +++ b/lib/shared/addon/components/form-members/template.hbs @@ -26,7 +26,7 @@
- {{#if (and (lte filteredUsers.length 1) (eq access.provider "local"))}} + {{#if (not canAddUser)}} {{#tooltip-element type="tooltip-basic" model=(t "formMembers.members.noAddUser")