From 7e5a246e71299a79223d4aa3fc699417500d600c Mon Sep 17 00:00:00 2001 From: shishirh Date: Thu, 19 Oct 2017 17:40:41 -0700 Subject: [PATCH] Allow admin to delete all owners --- .../Scripts/gallery/page-manage-owners.js | 49 ++++++------------- .../ManagePackageOwnersViewModel.cs | 3 ++ .../Views/Packages/ManagePackageOwners.cshtml | 7 ++- 3 files changed, 21 insertions(+), 38 deletions(-) diff --git a/src/NuGetGallery/Scripts/gallery/page-manage-owners.js b/src/NuGetGallery/Scripts/gallery/page-manage-owners.js index 0524cce291..c9ad0fe016 100644 --- a/src/NuGetGallery/Scripts/gallery/page-manage-owners.js +++ b/src/NuGetGallery/Scripts/gallery/page-manage-owners.js @@ -21,6 +21,7 @@ var viewModel = { package: { id: packageId }, + isUserAnAdmin: isUserAnAdmin, owners: ko.observableArray([]), newOwnerUsername: ko.observable(''), newOwnerMessage: ko.observable(''), @@ -29,15 +30,7 @@ message: ko.observable(''), - hasMoreThanOneOwner: function () { - return true; - }, - - isCurrentNamespaceOwner: function () { - return true; - }, - - hasMoreThanOneNamespaceOwners: function () { + IsAllowedToRemove: function (owner) { return true; }, @@ -158,51 +151,39 @@ } }; - viewModel.hasMoreThanOneOwner = ko.computed(function () { + viewModel.IsAllowedToRemove = function (owner) { + if (isUserAnAdmin.toLocaleLowerCase() === "True".toLocaleLowerCase() + || owner.pending()) { + return true; + }; + if (this.owners().length < 2) { return false; } var approvedOwner = 0; + var currentOwnerOwnsNamespace = false; + var namespaceOwnerCount = 0; ko.utils.arrayForEach(this.owners(), function (owner) { if (owner.pending() === false) { approvedOwner++; } - }); - return approvedOwner >= 2; - }, viewModel); - - viewModel.isCurrentNamespaceOwner = ko.computed(function () { - if (this.owners().length < 2) { - return false; - } - - var currentOwnerOwnsNamespace = false; - ko.utils.arrayForEach(this.owners(), function (owner) { if (owner.current === true) { currentOwnerOwnsNamespace = owner.isNamespaceOwner(); } - }); - - return currentOwnerOwnsNamespace; - }, viewModel); - viewModel.hasMoreThanOneNamespaceOwners = ko.computed(function () { - if (this.owners().length < 2) { - return false; - } - - var namespaceOwnerCount = 0; - ko.utils.arrayForEach(this.owners(), function (owner) { if (owner.isNamespaceOwner() === true) { namespaceOwnerCount++; } }); - return namespaceOwnerCount >= 2; - }, viewModel); + return approvedOwner >= 2 + && (!owner.isNamespaceOwner() + || (currentOwnerOwnsNamespace + && namespaceOwnerCount >= 2)); + }; ko.applyBindings(viewModel); diff --git a/src/NuGetGallery/ViewModels/ManagePackageOwnersViewModel.cs b/src/NuGetGallery/ViewModels/ManagePackageOwnersViewModel.cs index 6ebdb6ae2b..ed81629699 100644 --- a/src/NuGetGallery/ViewModels/ManagePackageOwnersViewModel.cs +++ b/src/NuGetGallery/ViewModels/ManagePackageOwnersViewModel.cs @@ -7,9 +7,12 @@ namespace NuGetGallery { public class ManagePackageOwnersViewModel : ListPackageItemViewModel { + public bool IsCurrentUserAnAdmin; + public ManagePackageOwnersViewModel(Package package, IPrincipal currentUser) : base(package) { + IsCurrentUserAnAdmin = currentUser.IsAdministrator(); } } } \ No newline at end of file diff --git a/src/NuGetGallery/Views/Packages/ManagePackageOwners.cshtml b/src/NuGetGallery/Views/Packages/ManagePackageOwners.cshtml index 8e262394ab..8b9d92a16e 100644 --- a/src/NuGetGallery/Views/Packages/ManagePackageOwners.cshtml +++ b/src/NuGetGallery/Views/Packages/ManagePackageOwners.cshtml @@ -50,8 +50,7 @@ (pending approval) - +
- +
@@ -142,6 +140,7 @@ @section bottomScripts {