Example #1
0
        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}"));
            }
        }
Example #2
0
        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}"));
                }
            }
        }