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 2023/01/25 23:15:20 UTC
[airavata-django-portal] branch AIRAVATA-3681 created (now 304b3d84)
This is an automated email from the ASF dual-hosted git repository.
machristie pushed a change to branch AIRAVATA-3681
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git
at 304b3d84 AIRAVATA-3681 Disable Ext. User Profile editor form for read-only admins
This branch includes the following new commits:
new 304b3d84 AIRAVATA-3681 Disable Ext. User Profile editor form for read-only admins
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[airavata-django-portal] 01/01: AIRAVATA-3681 Disable Ext. User Profile editor form for read-only admins
Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
machristie pushed a commit to branch AIRAVATA-3681
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git
commit 304b3d848f23d30d62a0d482c958234337cfca4f
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Wed Jan 25 18:15:06 2023 -0500
AIRAVATA-3681 Disable Ext. User Profile editor form for read-only admins
---
.../users/ExtendedUserProfileContainer.vue | 15 +++++-
.../ExtendedUserProfileFieldEditor.vue | 53 +++++++++++++++-------
.../js/models/ExtendedUserProfileField.js | 1 +
django_airavata/apps/auth/serializers.py | 7 ++-
4 files changed, 57 insertions(+), 19 deletions(-)
diff --git a/django_airavata/apps/admin/static/django_airavata_admin/src/components/users/ExtendedUserProfileContainer.vue b/django_airavata/apps/admin/static/django_airavata_admin/src/components/users/ExtendedUserProfileContainer.vue
index f2ff36a0..e5ac3a59 100644
--- a/django_airavata/apps/admin/static/django_airavata_admin/src/components/users/ExtendedUserProfileContainer.vue
+++ b/django_airavata/apps/admin/static/django_airavata_admin/src/components/users/ExtendedUserProfileContainer.vue
@@ -19,6 +19,7 @@
<extended-user-profile-field-editor
ref="extendedUserProfileFieldEditors"
:extendedUserProfileField="field"
+ :disabled="!field.userHasWriteAccess"
@valid="recordValidChildComponent(field)"
@invalid="recordInvalidChildComponent(field)"
/>
@@ -28,7 +29,7 @@
<div ref="bottom" />
<div class="fixed-footer">
<div class="d-flex">
- <b-dropdown text="Add Field">
+ <b-dropdown text="Add Field" :disabled="!isGatewayAdmin">
<b-dropdown-item @click="addField('text')">Text</b-dropdown-item>
<b-dropdown-item @click="addField('single_choice')"
>Single Choice</b-dropdown-item
@@ -40,7 +41,13 @@
>User Agreement</b-dropdown-item
>
</b-dropdown>
- <b-button variant="primary" @click="save" class="ml-2">Save</b-button>
+ <b-button
+ variant="primary"
+ @click="save"
+ class="ml-2"
+ :disabled="!isGatewayAdmin"
+ >Save</b-button
+ >
<b-button variant="secondary" class="ml-auto" href="/admin/users"
>Return to Manage Users</b-button
>
@@ -53,6 +60,7 @@
import { mapActions, mapGetters } from "vuex";
import ExtendedUserProfileFieldEditor from "./field-editors/ExtendedUserProfileFieldEditor.vue";
import { mixins } from "django-airavata-common-ui";
+import { session } from "django-airavata-api";
export default {
mixins: [mixins.ValidationParent],
components: { ExtendedUserProfileFieldEditor },
@@ -123,6 +131,9 @@ export default {
valid() {
return this.childComponentsAreValid;
},
+ isGatewayAdmin() {
+ return session.Session.isGatewayAdmin;
+ },
},
};
</script>
diff --git a/django_airavata/apps/admin/static/django_airavata_admin/src/components/users/field-editors/ExtendedUserProfileFieldEditor.vue b/django_airavata/apps/admin/static/django_airavata_admin/src/components/users/field-editors/ExtendedUserProfileFieldEditor.vue
index 0d2d5944..19438a76 100644
--- a/django_airavata/apps/admin/static/django_airavata_admin/src/components/users/field-editors/ExtendedUserProfileFieldEditor.vue
+++ b/django_airavata/apps/admin/static/django_airavata_admin/src/components/users/field-editors/ExtendedUserProfileFieldEditor.vue
@@ -3,7 +3,7 @@
:title="title"
:border-variant="$v.$anyDirty && $v.$invalid ? 'danger' : null"
>
- <b-form-group label="Name" label-cols="3">
+ <b-form-group label="Name" label-cols="3" :disabled="disabled">
<b-form-input v-model="name" :state="validateState($v.name)" />
<b-form-invalid-feedback :state="validateState($v.name)"
>This field is required.</b-form-invalid-feedback
@@ -12,6 +12,7 @@
<b-form-group
label="Checkbox Label"
label-cols="3"
+ :disabled="disabled"
v-if="extendedUserProfileField.field_type === 'user_agreement'"
>
<b-form-input
@@ -23,14 +24,14 @@
>This field is required.</b-form-invalid-feedback
>
</b-form-group>
- <b-form-group label-cols="3">
+ <b-form-group label-cols="3" :disabled="disabled">
<template #label>
Help text
<small class="text-muted text-small">(Optional)</small>
</template>
<b-form-input v-model="help_text" />
</b-form-group>
- <b-form-group>
+ <b-form-group :disabled="disabled">
<b-form-checkbox v-model="required" switch> Required </b-form-checkbox>
</b-form-group>
<b-card title="Options" v-if="extendedUserProfileField.supportsChoices">
@@ -39,7 +40,7 @@
v-for="({ $model: choice, display_text: $v_display_text },
index) in $v.choices.$each.$iter"
>
- <b-form-group :key="choice.key">
+ <b-form-group :key="choice.key" :disabled="disabled">
<b-input-group>
<b-form-input
:value="choice.display_text"
@@ -87,7 +88,11 @@
>
</b-form-group>
</template>
- <b-form-group :key="'other'" v-if="extendedUserProfileField.other">
+ <b-form-group
+ :key="'other'"
+ v-if="extendedUserProfileField.other"
+ :disabled="disabled"
+ >
<b-input-group>
<b-form-input
placeholder="User will see: Other (please specify)"
@@ -112,14 +117,14 @@
</b-input-group>
</b-form-group>
</transition-group>
- <b-form-group>
+ <b-form-group :disabled="disabled">
<b-button
@click="addChoice({ field: extendedUserProfileField })"
size="sm"
>Add Option</b-button
>
</b-form-group>
- <b-form-group>
+ <b-form-group :disabled="disabled">
<b-form-checkbox v-model="other" switch>
Allow user to type in an "Other" option
</b-form-checkbox>
@@ -134,7 +139,7 @@
.$each.$iter"
:key="link.key"
>
- <b-form-group label="Label" label-cols="3">
+ <b-form-group label="Label" label-cols="3" :disabled="disabled">
<b-form-input
:value="link.label"
@input="handleLinkLabelChanged(link, $event, $v_label)"
@@ -144,7 +149,7 @@
>This field is required.</b-form-invalid-feedback
>
</b-form-group>
- <b-form-group label="URL" label-cols="3">
+ <b-form-group label="URL" label-cols="3" :disabled="disabled">
<b-form-input
:value="link.url"
@input="handleLinkURLChanged(link, $event, $v_url)"
@@ -156,7 +161,7 @@
</b-form-group>
<b-row>
<b-col>
- <b-form-group>
+ <b-form-group :disabled="disabled">
<b-form-checkbox
:checked="link.display_link"
@input="handleLinkDisplayLinkChanged(link, $event)"
@@ -167,7 +172,7 @@
</b-form-group>
</b-col>
<b-col>
- <b-form-group>
+ <b-form-group :disabled="disabled">
<b-form-checkbox
:checked="link.display_inline"
@input="handleLinkDisplayInlineChanged(link, $event)"
@@ -178,18 +183,27 @@
</b-form-group>
</b-col>
</b-row>
- <b-button @click="handleLinkDeleted(link)" variant="danger" size="sm">
+ <b-button
+ @click="handleLinkDeleted(link)"
+ variant="danger"
+ size="sm"
+ :disabled="disabled"
+ >
Delete Link
</b-button>
</b-card>
</transition-group>
</template>
- <b-button @click="addLink({ field: extendedUserProfileField })" size="sm"
+ <b-button
+ @click="addLink({ field: extendedUserProfileField })"
+ size="sm"
+ :disabled="disabled"
>Add Link</b-button
>
<b-button
@click="handleMoveUp({ field: extendedUserProfileField })"
:disabled="
+ disabled ||
extendedUserProfileFields.indexOf(extendedUserProfileField) === 0
"
size="sm"
@@ -198,13 +212,20 @@
<b-button
@click="handleMoveDown({ field: extendedUserProfileField })"
:disabled="
+ disabled ||
extendedUserProfileFields.indexOf(extendedUserProfileField) ===
- extendedUserProfileFields.length - 1
+ extendedUserProfileFields.length - 1
"
size="sm"
>Move Down</b-button
>
- <b-button @click="handleDelete" variant="danger" size="sm">Delete</b-button>
+ <b-button
+ @click="handleDelete"
+ variant="danger"
+ size="sm"
+ :disabled="disabled"
+ >Delete</b-button
+ >
</b-card>
</template>
@@ -215,7 +236,7 @@ import { required, requiredIf } from "vuelidate/lib/validators";
import { errors } from "django-airavata-common-ui";
export default {
mixins: [validationMixin],
- props: ["extendedUserProfileField"],
+ props: ["extendedUserProfileField", "disabled"],
computed: {
...mapGetters("extendedUserProfile", ["extendedUserProfileFields"]),
name: {
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/ExtendedUserProfileField.js b/django_airavata/apps/api/static/django_airavata_api/js/models/ExtendedUserProfileField.js
index 04938ca5..44076bc2 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/ExtendedUserProfileField.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/ExtendedUserProfileField.js
@@ -32,6 +32,7 @@ const FIELDS = [
},
"other",
"required",
+ "userHasWriteAccess",
];
export default class ExtendedUserProfileField extends BaseModel {
diff --git a/django_airavata/apps/auth/serializers.py b/django_airavata/apps/auth/serializers.py
index 06d8def8..4b35c111 100644
--- a/django_airavata/apps/auth/serializers.py
+++ b/django_airavata/apps/auth/serializers.py
@@ -126,11 +126,12 @@ class ExtendedUserProfileFieldSerializer(serializers.ModelSerializer):
choices = ExtendedUserProfileFieldChoiceSerializer(required=False, many=True)
checkbox_label = serializers.CharField(allow_blank=True, required=False)
links = ExtendedUserProfileFieldLinkSerializer(required=False, many=True)
+ userHasWriteAccess = serializers.SerializerMethodField()
class Meta:
model = models.ExtendedUserProfileField
fields = ['id', 'name', 'help_text', 'order', 'created_date',
- 'updated_date', 'field_type', 'other', 'choices', 'checkbox_label', 'links', 'required']
+ 'updated_date', 'field_type', 'other', 'choices', 'checkbox_label', 'links', 'required', 'userHasWriteAccess']
read_only_fields = ('created_date', 'updated_date')
def to_representation(self, instance):
@@ -229,6 +230,10 @@ class ExtendedUserProfileFieldSerializer(serializers.ModelSerializer):
instance.save()
return instance
+ def get_userHasWriteAccess(self, extendedUserProfileField):
+ request = self.context['request']
+ return request.is_gateway_admin
+
class ExtendedUserProfileValueSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(label='ID', required=False)