public async static Task <TaskResult> AddToRole(Group group, User user, User target, GroupRole role) { using (VooperContext context = new VooperContext(VooperContext.DBOptions)) { // Validate arguments TaskResult validate = await TargetedCommandValidate(group, user, target, "addrole"); if (!validate.Succeeded) { return(validate); } // Authority check if (role.Weight > await group.GetAuthority(user)) { return(new TaskResult(false, $"{role.Name} has more authority than you!")); } if (role == null) { return(new TaskResult(false, "Error: The role value was empty.")); } if (await context.GroupRoleMembers.AnyAsync(x => x.Role_Id == role.RoleId && x.User_Id == target.Id)) { return(new TaskResult(false, "Error: The user already has this role.")); } if (role.GroupId != group.Id) { return(new TaskResult(false, "Error: The role does not belong to this group!")); } // Add pipe-delimited group name GroupRoleMember member = new GroupRoleMember() { Id = Guid.NewGuid().ToString(), Role_Id = role.RoleId, Group_Id = role.GroupId, User_Id = target.Id }; await context.GroupRoleMembers.AddAsync(member); await context.SaveChangesAsync(); return(new TaskResult(true, $"Successfully added {target.UserName} to {role.Name}")); } }
public async static Task <TaskResult> RemoveFromRole(Group group, User user, User target, GroupRole role) { using (VooperContext context = new VooperContext(VooperContext.DBOptions)) { // Validate arguments TaskResult validate = await TargetedCommandValidate(group, user, target, "removerole"); if (!validate.Succeeded) { return(validate); } // Authority check if (await group.GetAuthority(target) > await group.GetAuthority(user)) { return(new TaskResult(false, $"{target.UserName} has more authority than you!")); } if (role == null) { return(new TaskResult(false, "Error: The role value was empty.")); } if (group.Id != role.GroupId) { return(new TaskResult(false, "Error: The role does not belong to this group!")); } GroupRoleMember member = await context.GroupRoleMembers.FirstOrDefaultAsync(x => x.Role_Id == role.RoleId && x.User_Id == target.Id); if (member != null) { context.GroupRoleMembers.Remove(member); await context.SaveChangesAsync(); return(new TaskResult(true, $"Successfully removed from {role.Name}")); } else { return(new TaskResult(true, $"Error: That user did not have the role {role.Name}")); } } }