mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-07-09 03:04:19 -04:00
Some changes to get register/login flow working smoothly with Admin role.
This commit is contained in:
parent
259b954f26
commit
bb276a5984
@ -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.");
|
||||||
@ -49,15 +48,17 @@ namespace API.Controllers
|
|||||||
|
|
||||||
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
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -63,10 +63,5 @@ namespace API.Data
|
|||||||
.SingleOrDefaultAsync();
|
.SingleOrDefaultAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> AdminExists()
|
|
||||||
{
|
|
||||||
return await _context.Users.AnyAsync(x => x.IsAdmin);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user