Some changes to get register/login flow working smoothly with Admin role.

This commit is contained in:
Joseph Milazzo 2020-12-22 17:28:38 -06:00
parent 259b954f26
commit bb276a5984
6 changed files with 26 additions and 21 deletions

View File

@ -37,7 +37,6 @@ namespace API.Controllers
[HttpPost("register")]
public async Task<ActionResult<UserDto>> Register(RegisterDto registerDto)
{
_logger.LogInformation("Username: " + registerDto.Password);
if (await UserExists(registerDto.Username))
{
return BadRequest("Username is taken.");
@ -49,15 +48,17 @@ namespace API.Controllers
if (!result.Succeeded) return BadRequest(result.Errors);
var roleResult = await _userManager.AddToRoleAsync(user, "Pleb");
// TODO: Need a way to store Roles in enum and configure from there
var role = registerDto.IsAdmin ? "Admin" : "Pleb";
var roleResult = await _userManager.AddToRoleAsync(user, role);
if (!roleResult.Succeeded) return BadRequest(result.Errors);
return new UserDto()
return new UserDto
{
Username = user.UserName,
Token = await _tokenService.CreateToken(user),
IsAdmin = user.IsAdmin
};
}
@ -79,11 +80,10 @@ namespace API.Controllers
_userRepository.Update(user);
await _userRepository.SaveAllAsync();
return new UserDto()
return new UserDto
{
Username = user.UserName,
Token = await _tokenService.CreateToken(user),
IsAdmin = user.IsAdmin
Token = await _tokenService.CreateToken(user)
};
}

View File

@ -1,5 +1,8 @@
using System.Threading.Tasks;
using API.Entities;
using API.Interfaces;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
namespace API.Controllers
@ -7,16 +10,26 @@ namespace API.Controllers
public class AdminController : BaseApiController
{
private readonly IUserRepository _userRepository;
private readonly UserManager<AppUser> _userManager;
public AdminController(IUserRepository userRepository)
public AdminController(IUserRepository userRepository, UserManager<AppUser> userManager)
{
_userRepository = userRepository;
_userManager = userManager;
}
[HttpGet]
[HttpGet("exists")]
public async Task<ActionResult<bool>> AdminExists()
{
return await _userRepository.AdminExists();
var users = await _userManager.GetUsersInRoleAsync("Admin");
return users.Count > 0;
}
[Authorize(Policy = "RequireAdminRole")]
[HttpDelete]
public async Task<ActionResult> DeleteUser(string username)
{
return BadRequest("Not Implemented");
}

View File

@ -14,7 +14,6 @@ namespace API.DTOs
public string Username { get; set; }
public DateTime Created { get; set; }
public DateTime LastActive { get; set; }
public bool IsAdmin { get; set; }
public IEnumerable<LibraryDto> Libraries { get; set; }
}
}

View File

@ -2,8 +2,7 @@
{
public class UserDto
{
public string Username { get; set; }
public string Token { get; set; }
public bool IsAdmin { get; set; }
public string Username { get; init; }
public string Token { get; init; }
}
}

View File

@ -63,10 +63,5 @@ namespace API.Data
.SingleOrDefaultAsync();
}
public async Task<bool> AdminExists()
{
return await _context.Users.AnyAsync(x => x.IsAdmin);
}
}
}

View File

@ -15,6 +15,5 @@ namespace API.Interfaces
Task<AppUser> GetUserByUsernameAsync(string username);
Task<IEnumerable<MemberDto>> GetMembersAsync();
Task<MemberDto> GetMemberAsync(string username);
Task<bool> AdminExists();
}
}