From 3b2cf2f1de2805c11a9eb81602a9a4397081bdfb Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Thu, 22 Mar 2018 19:55:14 +0900 Subject: [PATCH] Can add administrator, fix #65 --- BTCPayServer/BTCPayServer.csproj | 2 +- BTCPayServer/Controllers/ServerController.cs | 44 +++++++++++++++++++ .../Models/ServerViewModels/UserViewModel.cs | 17 +++++++ BTCPayServer/Properties/launchSettings.json | 2 +- BTCPayServer/Views/Server/ListUsers.cshtml | 5 ++- BTCPayServer/Views/Server/User.cshtml | 22 ++++++++++ 6 files changed, 88 insertions(+), 4 deletions(-) create mode 100644 BTCPayServer/Models/ServerViewModels/UserViewModel.cs create mode 100644 BTCPayServer/Views/Server/User.cshtml diff --git a/BTCPayServer/BTCPayServer.csproj b/BTCPayServer/BTCPayServer.csproj index 5da02bdcf..94138345a 100644 --- a/BTCPayServer/BTCPayServer.csproj +++ b/BTCPayServer/BTCPayServer.csproj @@ -2,7 +2,7 @@ Exe netcoreapp2.0 - 1.0.1.57 + 1.0.1.58 NU1701,CA1816,CA1308,CA1810,CA2208 diff --git a/BTCPayServer/Controllers/ServerController.cs b/BTCPayServer/Controllers/ServerController.cs index 76f38f25d..649e8fd2c 100644 --- a/BTCPayServer/Controllers/ServerController.cs +++ b/BTCPayServer/Controllers/ServerController.cs @@ -43,6 +43,50 @@ namespace BTCPayServer.Controllers return View(users); } + [Route("server/users/{userId}")] + public new async Task User(string userId) + { + var user = await _UserManager.FindByIdAsync(userId); + if (user == null) + return NotFound(); + var roles = await _UserManager.GetRolesAsync(user); + var userVM = new UserViewModel(); + userVM.Id = user.Id; + userVM.IsAdmin = IsAdmin(roles); + return View(userVM); + } + + private static bool IsAdmin(IList roles) + { + return roles.Contains(Roles.ServerAdmin, StringComparer.Ordinal); + } + + [Route("server/users/{userId}")] + [HttpPost] + public new async Task User(string userId, UserViewModel viewModel) + { + var user = await _UserManager.FindByIdAsync(userId); + if (user == null) + return NotFound(); + var roles = await _UserManager.GetRolesAsync(user); + var isAdmin = IsAdmin(roles); + bool updated = false; + + if(isAdmin != viewModel.IsAdmin) + { + if (viewModel.IsAdmin) + await _UserManager.AddToRoleAsync(user, Roles.ServerAdmin); + else + await _UserManager.RemoveFromRoleAsync(user, Roles.ServerAdmin); + updated = true; + } + if(updated) + { + viewModel.StatusMessage = "User successfully updated"; + } + return View(viewModel); + } + [Route("server/users/{userId}/delete")] public async Task DeleteUser(string userId) diff --git a/BTCPayServer/Models/ServerViewModels/UserViewModel.cs b/BTCPayServer/Models/ServerViewModels/UserViewModel.cs new file mode 100644 index 000000000..eddce628f --- /dev/null +++ b/BTCPayServer/Models/ServerViewModels/UserViewModel.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; + +namespace BTCPayServer.Models.ServerViewModels +{ + public class UserViewModel + { + public string Id { get; set; } + public string Email { get; set; } + [Display(Name = "Is admin")] + public bool IsAdmin { get; set; } + public string StatusMessage { get; set; } + } +} diff --git a/BTCPayServer/Properties/launchSettings.json b/BTCPayServer/Properties/launchSettings.json index f192356af..9fc74619b 100644 --- a/BTCPayServer/Properties/launchSettings.json +++ b/BTCPayServer/Properties/launchSettings.json @@ -13,7 +13,7 @@ "BTCPAY_BTCLIGHTNING": "http://api-token:foiewnccewuify@127.0.0.1:54938/", "BTCPAY_POSTGRES": "User ID=postgres;Host=127.0.0.1;Port=39372;Database=btcpayserver" }, - "applicationUrl": "http://localhost:14142/" + "applicationUrl": "http://127.0.0.1:14142/" } } } diff --git a/BTCPayServer/Views/Server/ListUsers.cshtml b/BTCPayServer/Views/Server/ListUsers.cshtml index c62c6a0cb..44694ffe5 100644 --- a/BTCPayServer/Views/Server/ListUsers.cshtml +++ b/BTCPayServer/Views/Server/ListUsers.cshtml @@ -23,7 +23,8 @@ @user.Name @user.Email - Remove - } + Modify - Remove + + } diff --git a/BTCPayServer/Views/Server/User.cshtml b/BTCPayServer/Views/Server/User.cshtml new file mode 100644 index 000000000..56a1d8d05 --- /dev/null +++ b/BTCPayServer/Views/Server/User.cshtml @@ -0,0 +1,22 @@ +@model UserViewModel +@{ + ViewData["Title"] = Model.Email; + ViewData.AddActivePage(ServerNavPages.Users); +} + + +

@ViewData["Title"]

+@Html.Partial("_StatusMessage", Model.StatusMessage) + + +
+
+
+
+ + +
+ +
+
+