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/07/25 14:48:07 UTC
[airavata-django-portal] 03/05: AIRAVATA-3177 Allow readonly admins
to see gateway resource profile
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 4dfc8458a51cc3c5e0596005719835ca1459cca6
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Wed Jul 24 12:09:41 2019 -0400
AIRAVATA-3177 Allow readonly admins to see gateway resource profile
---
django_airavata/apps/admin/apps.py | 3 ++-
.../src/components/credentials/SSHCredentialSelector.vue | 8 ++++++--
.../components/gatewayprofile/GatewayResourceProfileEditor.vue | 2 +-
.../gatewayprofile/GatewayResourceProfileEditorContainer.vue | 6 ++----
.../src/components/gatewayprofile/StoragePreferenceList.vue | 10 +++++++---
django_airavata/apps/api/serializers.py | 5 +++++
.../django_airavata_api/js/models/GatewayResourceProfile.js | 3 ++-
7 files changed, 25 insertions(+), 12 deletions(-)
diff --git a/django_airavata/apps/admin/apps.py b/django_airavata/apps/admin/apps.py
index 91b3752..5501733 100644
--- a/django_airavata/apps/admin/apps.py
+++ b/django_airavata/apps/admin/apps.py
@@ -54,7 +54,8 @@ class AdminConfig(AiravataAppConfig):
'icon': 'fa fa-tasks',
'url': 'django_airavata_admin:gateway_resource_profile',
'active_prefixes': ['gateway-resource-profile'],
- 'enabled': lambda req: req.is_gateway_admin
+ 'enabled': lambda req: (req.is_gateway_admin or
+ req.is_read_only_gateway_admin)
},
{
'label': 'Manage Notices',
diff --git a/django_airavata/apps/admin/static/django_airavata_admin/src/components/credentials/SSHCredentialSelector.vue b/django_airavata/apps/admin/static/django_airavata_admin/src/components/credentials/SSHCredentialSelector.vue
index ead1bb6..c9c6584 100644
--- a/django_airavata/apps/admin/static/django_airavata_admin/src/components/credentials/SSHCredentialSelector.vue
+++ b/django_airavata/apps/admin/static/django_airavata_admin/src/components/credentials/SSHCredentialSelector.vue
@@ -1,7 +1,7 @@
<template>
<div>
<b-input-group>
- <b-form-select v-model="data" :options="credentialStoreTokenOptions">
+ <b-form-select v-model="data" :options="credentialStoreTokenOptions" :disabled="readonly">
<option v-if="nullOption" slot="first" :value="null" :disabled="nullOptionDisabled">
<slot name="null-option-label" :defaultCredentialSummary="defaultCredentialSummary">
<span v-if="defaultCredentialSummary">
@@ -16,7 +16,7 @@
<b-input-group-append>
<clipboard-copy-button variant="secondary" :text="copySSHPublicKeyText">
</clipboard-copy-button>
- <b-button variant="secondary" @click="showNewSSHCredentialModal">
+ <b-button v-if="!readonly" variant="secondary" @click="showNewSSHCredentialModal">
<i class="fa fa-plus"></i>
</b-button>
</b-input-group-append>
@@ -47,6 +47,10 @@ export default {
nullOptionDisabled: {
type: Boolean,
default: false
+ },
+ readonly: {
+ type: Boolean,
+ default: false
}
},
mixins: [mixins.VModelMixin],
diff --git a/django_airavata/apps/admin/static/django_airavata_admin/src/components/gatewayprofile/GatewayResourceProfileEditor.vue b/django_airavata/apps/admin/static/django_airavata_admin/src/components/gatewayprofile/GatewayResourceProfileEditor.vue
index 244bdb6..cb0ac76 100644
--- a/django_airavata/apps/admin/static/django_airavata_admin/src/components/gatewayprofile/GatewayResourceProfileEditor.vue
+++ b/django_airavata/apps/admin/static/django_airavata_admin/src/components/gatewayprofile/GatewayResourceProfileEditor.vue
@@ -6,7 +6,7 @@
Gateway Resource Profile - {{ data.gatewayID }}
</h1>
<b-form-group label="Default SSH Credential" label-for="default-credential-store-token" description="This is the default SSH credential that will be used for storage preferences that don't specify their own SSH credential.">
- <ssh-credential-selector id="default-credential-store-token" v-model="data.credentialStoreToken"/>
+ <ssh-credential-selector id="default-credential-store-token" v-model="data.credentialStoreToken" :readonly="!data.userHasWriteAccess"/>
</b-form-group>
</div>
</div>
diff --git a/django_airavata/apps/admin/static/django_airavata_admin/src/components/gatewayprofile/GatewayResourceProfileEditorContainer.vue b/django_airavata/apps/admin/static/django_airavata_admin/src/components/gatewayprofile/GatewayResourceProfileEditorContainer.vue
index 3e827c0..949f30a 100644
--- a/django_airavata/apps/admin/static/django_airavata_admin/src/components/gatewayprofile/GatewayResourceProfileEditorContainer.vue
+++ b/django_airavata/apps/admin/static/django_airavata_admin/src/components/gatewayprofile/GatewayResourceProfileEditorContainer.vue
@@ -15,12 +15,12 @@
<div class="card-body">
<storage-preference-list v-if="gatewayResourceProfile" :storagePreferences="gatewayResourceProfile.storagePreferences"
:default-credential-store-token="gatewayResourceProfile.credentialStoreToken" @updated="updatedStoragePreference"
- @added="addedStoragePreference" @delete="deleteStoragePreference" />
+ @added="addedStoragePreference" @delete="deleteStoragePreference" :readonly="!gatewayResourceProfile.userHasWriteAccess"/>
</div>
</div>
</div>
</div>
- <div class="row">
+ <div class="row" v-if="gatewayResourceProfile && gatewayResourceProfile.userHasWriteAccess">
<div class="col">
<b-button variant="primary" @click="save">
Save
@@ -36,14 +36,12 @@
<script>
import { services } from "django-airavata-api";
import GatewayResourceProfileEditor from "./GatewayResourceProfileEditor.vue";
-import StoragePreferenceEditor from "./StoragePreferenceEditor.vue";
import StoragePreferenceList from "./StoragePreferenceList.vue";
export default {
name: "gateway-resource-profile-editor-container",
components: {
GatewayResourceProfileEditor,
- StoragePreferenceEditor,
StoragePreferenceList
},
data() {
diff --git a/django_airavata/apps/admin/static/django_airavata_admin/src/components/gatewayprofile/StoragePreferenceList.vue b/django_airavata/apps/admin/static/django_airavata_admin/src/components/gatewayprofile/StoragePreferenceList.vue
index 28df694..145d0e0 100644
--- a/django_airavata/apps/admin/static/django_airavata_admin/src/components/gatewayprofile/StoragePreferenceList.vue
+++ b/django_airavata/apps/admin/static/django_airavata_admin/src/components/gatewayprofile/StoragePreferenceList.vue
@@ -1,6 +1,6 @@
<template>
<list-layout @add-new-item="addNewStoragePreference" :items="decoratedStoragePreferences" title="Storage Preferences"
- new-item-button-text="New Storage Preference">
+ new-item-button-text="New Storage Preference" :new-button-disabled="readonly">
<template slot="new-item-editor">
<b-card v-if="showNewItemEditor" title="New Storage Preference">
<b-form-group label="Storage Resource" label-for="storage-resource">
@@ -29,11 +29,11 @@
</b-badge>
</template>
<template slot="action" slot-scope="data">
- <b-link class="action-link" @click="toggleDetails(data)">
+ <b-link v-if="!readonly" class="action-link" @click="toggleDetails(data)">
Edit
<i class="fa fa-edit" aria-hidden="true"></i>
</b-link>
- <delete-link @delete="deleteStoragePreference(data.item.storageResourceId)">
+ <delete-link v-if="!readonly" @delete="deleteStoragePreference(data.item.storageResourceId)">
Are you sure you want to delete the storage preference for {{ getStorageResourceName(data.item.storageResourceId) }}?
</delete-link>
</template>
@@ -68,6 +68,10 @@ export default {
},
defaultCredentialStoreToken: {
type: String
+ },
+ readonly: {
+ type: Boolean,
+ default: false
}
},
data() {
diff --git a/django_airavata/apps/api/serializers.py b/django_airavata/apps/api/serializers.py
index 5ba819d..4e5fb21 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -805,6 +805,11 @@ class GatewayResourceProfileSerializer(
lookup_field='gatewayID',
lookup_url_kwarg='gateway_id')
storagePreferences = StoragePreferenceSerializer(many=True)
+ userHasWriteAccess = serializers.SerializerMethodField()
+
+ def get_userHasWriteAccess(self, gatewayResourceProfile):
+ request = self.context['request']
+ return request.is_gateway_admin
class StorageResourceSerializer(
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/GatewayResourceProfile.js b/django_airavata/apps/api/static/django_airavata_api/js/models/GatewayResourceProfile.js
index 5826e68..7ce6a72 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/GatewayResourceProfile.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/GatewayResourceProfile.js
@@ -11,7 +11,8 @@ const FIELDS = [
list: true
},
"identityServerTenant",
- "identityServerPwdCredToken"
+ "identityServerPwdCredToken",
+ "userHasWriteAccess"
];
export default class GatewayResourceProfile extends BaseModel {