public async Task <IHttpActionResult> GetUser(string Id)
        {
            var user = await JWTUserManager.FindByIdAsync(Id);

            if (user != null)
            {
                return(Ok(EntityFactory.Create(user)));
            }

            return(NotFound());
        }
        public async Task <IHttpActionResult> AssignRolesToUser(
            [FromUri] string id, [FromBody] string[] rolesToAssign)
        {
            var user = await JWTUserManager.FindByIdAsync(id);

            if (user == null)
            {
                return(NotFound());
            }

            var currentRoleSet =
                JWTRoleManager.Roles
                .Where(r => r.ClientId == user.ClientId || r.ClientId == null)
                .ToList();

            var currentUserRolesList = await JWTUserManager.GetRolesAsync(user.Id);

            var currentUserRoles = currentUserRolesList.List;

            var nonExistingRoles = rolesToAssign.Except(currentRoleSet.Select(r => r.Name)).ToArray();

            if (nonExistingRoles.Any())
            {
                ModelState.AddModelError("",
                                         string.Format(JWTAuthServerConstants.RolesDontExist, string.Join(",", nonExistingRoles)));
                return(BadRequest(ModelState));
            }

            var removeResult =
                await JWTUserManager.RemoveFromRolesAsync(user.Id, currentUserRoles.Select(r => r.Name).ToArray());

            if (!removeResult.Succeeded)
            {
                ModelState.AddModelError("", JWTAuthServerConstants.RoleRemoveFailed);
                return(BadRequest(ModelState));
            }

            var addResult = await JWTUserManager.AddToRolesAsync(user.Id, rolesToAssign);

            if (!addResult.Succeeded)
            {
                ModelState.AddModelError("", JWTAuthServerConstants.RoleAddFailed);
                return(BadRequest(ModelState));
            }

            return(Ok());
        }
        public async Task <IHttpActionResult> DeleteUser(string id)
        {
            var appUser = await JWTUserManager.FindByIdAsync(id);

            if (appUser != null)
            {
                var result = await JWTUserManager.DeleteAsync(appUser);

                if (!result.Succeeded)
                {
                    return(GetErrorResult(result));
                }

                return(Ok());
            }

            return(NotFound());
        }