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 e6a91075065138edd6e3a7b847b193c79e477fda Author: Marcus Christie <[email protected]> AuthorDate: Thu May 9 12:15:16 2019 -0400 AIRAVATA-3030 simplified code for displaying inherited sharings --- .../static/common/js/components/ShareButton.vue | 38 +++--------- .../common/js/components/SharedEntityEditor.vue | 68 +++++++++------------- 2 files changed, 36 insertions(+), 70 deletions(-) diff --git a/django_airavata/static/common/js/components/ShareButton.vue b/django_airavata/static/common/js/components/ShareButton.vue index 6380955..3f9fe42 100644 --- a/django_airavata/static/common/js/components/ShareButton.vue +++ b/django_airavata/static/common/js/components/ShareButton.vue @@ -26,26 +26,22 @@ v-model="localSharedEntity" :users="users" :groups="groups" - :parent-entity-owner="parentEntityOwner" - :parent-entity-label="parentEntityLabel" :disallow-editing-admin-groups="disallowEditingAdminGroups" /> <!-- Only show parent entity permissions for new entities --> - <template v-if="!entityId && hasParentSharedEntityPermissions"> + <template v-if="hasParentSharedEntityPermissions"> <shared-entity-editor v-if="parentSharedEntity && users && groups" v-model="parentSharedEntity" :users="users" :groups="groups" :readonly="true" - class="mt-5" + class="mt-4" > - <span slot="permissions-header">Inherited {{ parentEntityLabel }} Permissions</span> + <span slot="permissions-header">Inherited {{ parentEntityLabel }} Permissions + <!-- <small class="text-muted" v-if="parentEntityOwner">Owned by {{parentEntityOwner.firstName}} {{parentEntityOwner.lastName}} ({{parentEntityOwner.email}})</small> --> + </span> </shared-entity-editor> - <small class="text-muted">These permissions are inherited when your <span class="text-lowercase">{{ entityLabel - }}</span> is initially - created but can be updated - afterwards.</small> </template> </b-modal> </div> @@ -64,10 +60,6 @@ export default { type: String, default: "Parent" }, - entityLabel: { - type: String, - default: "Entity" - }, sharedEntity: models.SharedEntity, autoAddDefaultGatewayUsersGroup: { type: Boolean, @@ -117,18 +109,10 @@ export default { ...this.localSharedEntity.userPermissions.map(up => up.user) ); } - if (this.parentSharedEntity) { - // Only add in inherited permissions if we haven't saved yet because - // once saved the inherited permissions are already copied in - if ( - this.localSharedEntity && - !this.localSharedEntity.entityId && - this.parentSharedEntity.userPermissions - ) { - users.push( - ...this.parentSharedEntity.userPermissions.map(up => up.user) - ); - } + if (this.parentSharedEntity && this.parentSharedEntity.userPermissions) { + users.push( + ...this.parentSharedEntity.userPermissions.map(up => up.user) + ); if (this.parentEntityOwner) { users.push(this.parentEntityOwner); } @@ -147,11 +131,7 @@ export default { combinedGroups() { const groups = []; groups.push(...this.filteredGroupPermissions.map(gp => gp.group)); - // Only add in inherited permissions if we haven't saved yet because - // once saved the inherited permissions are already copied in if ( - this.localSharedEntity && - !this.localSharedEntity.entityId && this.parentSharedEntity && this.parentSharedEntity.groupPermissions ) { diff --git a/django_airavata/static/common/js/components/SharedEntityEditor.vue b/django_airavata/static/common/js/components/SharedEntityEditor.vue index a03e5e2..609d01d 100644 --- a/django_airavata/static/common/js/components/SharedEntityEditor.vue +++ b/django_airavata/static/common/js/components/SharedEntityEditor.vue @@ -32,42 +32,41 @@ v-if="usersCount > 0" id="modal-user-table" hover - :items="sortedUserPermissionsData" + :items="sortedUserPermissions" :fields="userFields" > <template slot="name" slot-scope="data" > - <span :title="data.item.user.userId" :class="data.item.classes">{{data.item.user.firstName}} {{data.item.user.lastName}}</span> + <span :title="data.item.user.userId" :class="userDataClasses">{{data.item.user.firstName}} {{data.item.user.lastName}}</span> </template> <template slot="email" slot-scope="data" > - <span :class="data.item.classes">{{data.item.user.email}}</span> + <span :class="userDataClasses">{{data.item.user.email}}</span> </template> <template slot="permission" slot-scope="data" > <b-form-select - v-if="!data.item.readonly" - :value="data.item.permissionType" + v-if="!readonly" + v-model="data.item.permissionType" :options="permissionOptions" - @input="changeUserPermission(data.item.user, $event)" /> <span v-else class="text-uppercase" - :class="data.item.classes" - >{{ data.item.permissionTypeLabel }}</span> + :class="userDataClasses" + >{{ data.item.permissionType.name }}</span> </template> <template slot="remove" slot-scope="data" > - <b-link v-if="!data.item.readonly" @click="removeUser(data.item.user)"> + <b-link v-if="!readonly" @click="removeUser(data.item.user)"> <span class="fa fa-trash"></span> </b-link> </template> @@ -145,13 +144,6 @@ export default { readonly: { type: Boolean, default: false - }, - parentEntityOwner: { - type: models.UserProfile, - }, - parentEntityLabel: { - type: String, - default: "Parent" } }, components: { @@ -174,35 +166,33 @@ export default { ]; }, usersCount: function() { - return this.sortedUserPermissionsData.length; + return this.data && this.data.userPermissions + ? this.data.userPermissions.length + : 0; }, - sortedUserPermissionsData: function() { + sortedUserPermissions: function() { const userPermsCopy = this.data.userPermissions ? this.data.userPermissions.slice() : []; - const sorted = utils.StringUtils.sortIgnoreCase( + const sortedUserPerms = utils.StringUtils.sortIgnoreCase( userPermsCopy, userPerm => userPerm.user.lastName + ", " + userPerm.user.firstName ); - const sortedData = sorted.map(up => { - return { - user: up.user, - permissionType: up.permissionType, - permissionTypeLabel: up.permissionType.name, - readonly: this.readonly, - classes: this.readonly ? ['text-muted', 'font-italic'] : null - } - }); - if (this.parentEntityOwner) { - sortedData.push({ - user: this.parentEntityOwner, - permissionType: models.ResourcePermissionType.OWNER, - permissionTypeLabel: this.parentEntityLabel + " OWNER", - readonly: true, - classes: ['text-muted', 'font-italic'] - }); + // When in readonly mode, if the current owner isn't the owner, display + // the user with the OWNER permission + if (this.readonly && !this.data.isOwner) { + sortedUserPerms.push(new models.UserPermission({ + user: this.data.owner, + permissionType: models.ResourcePermissionType.OWNER + })); + } + return sortedUserPerms; + }, + userDataClasses() { + return { + 'text-muted': this.readonly, + 'font-italic': this.readonly } - return sortedData; }, filteredGroupPermissions: function() { return this.data && this.data.groupPermissions @@ -295,10 +285,6 @@ export default { removeUser: function(user) { this.data.removeUser(user); }, - changeUserPermission(user, permissionType) { - const up = this.data.userPermissions.find(up => up.user.airavataInternalUserId === user.airavataInternalUserId); - up.permissionType = permissionType; - }, removeGroup: function(group) { this.data.removeGroup(group); },
