You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2019/05/31 18:18:18 UTC
[airavata-django-portal] 03/05: AIRAVATA-3040 Put gateway groups at
top of list
This is an automated email from the ASF dual-hosted git repository.
machristie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git
commit 89bb973dc7f5399c911b43884ec06321e894d4a4
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Thu May 30 12:55:33 2019 -0400
AIRAVATA-3040 Put gateway groups at top of list
---
.../components/users/UserGroupMembershipEditor.vue | 94 ++++++++++++++++------
.../static/django_airavata_api/js/models/Group.js | 4 +
2 files changed, 74 insertions(+), 24 deletions(-)
diff --git a/django_airavata/apps/admin/static/django_airavata_admin/src/components/users/UserGroupMembershipEditor.vue b/django_airavata/apps/admin/static/django_airavata_admin/src/components/users/UserGroupMembershipEditor.vue
index ba8a940..2695827 100644
--- a/django_airavata/apps/admin/static/django_airavata_admin/src/components/users/UserGroupMembershipEditor.vue
+++ b/django_airavata/apps/admin/static/django_airavata_admin/src/components/users/UserGroupMembershipEditor.vue
@@ -2,14 +2,36 @@
<b-form-group label="Groups">
<b-form-checkbox-group
:checked="selected"
- :options="options"
+ :options="userDefinedGroupOptions"
@input="groupsUpdated"
stacked
- ></b-form-checkbox-group>
+ >
+ <template slot="first">
+ <b-form-checkbox
+ v-if="gatewayUsersGroupOption"
+ :value="gatewayUsersGroupOption.value"
+ :disabled="gatewayUsersGroupOption.disabled"
+ >{{ gatewayUsersGroupOption.text }} <b-badge>Default</b-badge>
+ </b-form-checkbox>
+ <b-form-checkbox
+ v-if="adminsGroupOption"
+ :value="adminsGroupOption.value"
+ :disabled="adminsGroupOption.disabled"
+ >{{ adminsGroupOption.text }} <b-badge>Admins</b-badge>
+ </b-form-checkbox>
+ <b-form-checkbox
+ v-if="readOnlyAdminsGroupOption"
+ :value="readOnlyAdminsGroupOption.value"
+ :disabled="readOnlyAdminsGroupOption.disabled"
+ >{{ readOnlyAdminsGroupOption.text }} <b-badge>Read Only Admins</b-badge>
+ </b-form-checkbox>
+ </template>
+ </b-form-checkbox-group>
</b-form-group>
</template>
<script>
+import { utils } from "django-airavata-api";
import { mixins } from "django-airavata-common-ui";
export default {
name: "user-group-membership-editor",
@@ -28,28 +50,43 @@ export default {
selected() {
return this.data.map(g => g.id);
},
- options() {
- const options = this.data.map(g => {
- return {
- text: g.name,
- value: g.id,
- disabled: true
- };
+ combinedGroups() {
+ const groups = {};
+ this.value.concat(this.editableGroups).forEach(g => {
+ groups[g.id] = g;
});
- this.editableGroups.forEach(g => {
- const editableOption = options.find(opt => opt.value === g.id);
- if (editableOption) {
- editableOption.disabled = false;
- } else {
- options.push({
- text: g.name,
- value: g.id,
- disabled: false
- });
- }
- });
- // TODO: sort the options?
- return options;
+ return Object.values(groups);
+ },
+ userDefinedGroups() {
+ return this.combinedGroups
+ ? this.combinedGroups.filter(g => {
+ return (
+ !g.isDefaultGatewayUsersGroup &&
+ !g.isGatewayAdminsGroup &&
+ !g.isReadOnlyGatewayAdminsGroup
+ );
+ })
+ : [];
+ },
+ userDefinedGroupOptions() {
+ const options = this.userDefinedGroups.map(g =>
+ this.createGroupOption(g)
+ );
+ return utils.StringUtils.sortIgnoreCase(options, o => o.text);
+ },
+ gatewayUsersGroupOption() {
+ const group = this.combinedGroups.find(g => g.isDefaultGatewayUsersGroup);
+ return group ? this.createGroupOption(group) : null;
+ },
+ adminsGroupOption() {
+ const group = this.combinedGroups.find(g => g.isGatewayAdminsGroup);
+ return group ? this.createGroupOption(group) : null;
+ },
+ readOnlyAdminsGroupOption() {
+ const group = this.combinedGroups.find(
+ g => g.isReadOnlyGatewayAdminsGroup
+ );
+ return group ? this.createGroupOption(group) : null;
}
},
methods: {
@@ -57,7 +94,9 @@ export default {
// Check for added groups
for (const checkedGroupId of checkedGroups) {
if (!this.data.find(g => g.id === checkedGroupId)) {
- const addedGroup = this.editableGroups.find(g => g.id === checkedGroupId);
+ const addedGroup = this.editableGroups.find(
+ g => g.id === checkedGroupId
+ );
this.data.push(addedGroup);
}
}
@@ -68,6 +107,13 @@ export default {
this.data.splice(groupIndex, 1);
}
}
+ },
+ createGroupOption(group) {
+ return {
+ text: group.name,
+ value: group.id,
+ disabled: !group.userHasWriteAccess
+ };
}
}
};
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/Group.js b/django_airavata/apps/api/static/django_airavata_api/js/models/Group.js
index 77e12cd..fff93c0 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/Group.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/Group.js
@@ -57,4 +57,8 @@ export default class Group extends BaseModel {
get isAdminGroup() {
return this.isReadOnlyGatewayAdminsGroup || this.isGatewayAdminsGroup;
}
+
+ get userHasWriteAccess() {
+ return this.isOwner || this.isAdmin;
+ }
}