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")] [HttpPost("register")]
public async Task<ActionResult<UserDto>> Register(RegisterDto registerDto) public async Task<ActionResult<UserDto>> Register(RegisterDto registerDto)
{ {
_logger.LogInformation("Username: " + registerDto.Password);
if (await UserExists(registerDto.Username)) if (await UserExists(registerDto.Username))
{ {
return BadRequest("Username is taken."); return BadRequest("Username is taken.");
@ -48,16 +47,18 @@ namespace API.Controllers
var result = await _userManager.CreateAsync(user, registerDto.Password); var result = await _userManager.CreateAsync(user, registerDto.Password);
if (!result.Succeeded) return BadRequest(result.Errors); 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); if (!roleResult.Succeeded) return BadRequest(result.Errors);
return new UserDto() return new UserDto
{ {
Username = user.UserName, Username = user.UserName,
Token = await _tokenService.CreateToken(user), Token = await _tokenService.CreateToken(user),
IsAdmin = user.IsAdmin
}; };
} }
@ -79,11 +80,10 @@ namespace API.Controllers
_userRepository.Update(user); _userRepository.Update(user);
await _userRepository.SaveAllAsync(); await _userRepository.SaveAllAsync();
return new UserDto() return new UserDto
{ {
Username = user.UserName, Username = user.UserName,
Token = await _tokenService.CreateToken(user), Token = await _tokenService.CreateToken(user)
IsAdmin = user.IsAdmin
}; };
} }

View File

@ -1,5 +1,8 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using API.Entities;
using API.Interfaces; using API.Interfaces;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace API.Controllers namespace API.Controllers
@ -7,16 +10,26 @@ namespace API.Controllers
public class AdminController : BaseApiController public class AdminController : BaseApiController
{ {
private readonly IUserRepository _userRepository; private readonly IUserRepository _userRepository;
private readonly UserManager<AppUser> _userManager;
public AdminController(IUserRepository userRepository) public AdminController(IUserRepository userRepository, UserManager<AppUser> userManager)
{ {
_userRepository = userRepository; _userRepository = userRepository;
_userManager = userManager;
} }
[HttpGet] [HttpGet("exists")]
public async Task<ActionResult<bool>> AdminExists() 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 string Username { get; set; }
public DateTime Created { get; set; } public DateTime Created { get; set; }
public DateTime LastActive { get; set; } public DateTime LastActive { get; set; }
public bool IsAdmin { get; set; }
public IEnumerable<LibraryDto> Libraries { get; set; } public IEnumerable<LibraryDto> Libraries { get; set; }
} }
} }

View File

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

View File

@ -62,11 +62,6 @@ namespace API.Data
.ProjectTo<MemberDto>(_mapper.ConfigurationProvider) .ProjectTo<MemberDto>(_mapper.ConfigurationProvider)
.SingleOrDefaultAsync(); .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<AppUser> GetUserByUsernameAsync(string username);
Task<IEnumerable<MemberDto>> GetMembersAsync(); Task<IEnumerable<MemberDto>> GetMembersAsync();
Task<MemberDto> GetMemberAsync(string username); Task<MemberDto> GetMemberAsync(string username);
Task<bool> AdminExists();
} }
} }