private void SendPermissionChange(ulong steamId, CommandStruct commandStruct)
        {
            var message = new MessageCommandPermission()
            {
                Commands      = new List <CommandStruct>(),
                CommandAction = CommandActions.Level
            };

            message.Commands.Add(commandStruct);

            ConnectionHelper.SendMessageToPlayer(steamId, message);
        }
        public void UpdateCommandSecurity(CommandStruct command, ulong sender)
        {
            var commandStruct =
                Commands.FirstOrDefault(c => c.Name.Equals(command.Name, StringComparison.InvariantCultureIgnoreCase));

            int index;

            if (_commandCache.ContainsKey(sender) && command.Name.Substring(0, 1) == "#" &&
                Int32.TryParse(command.Name.Substring(1), out index) && index > 0 && index <= _commandCache[sender].Count)
            {
                commandStruct =
                    Commands.FirstOrDefault(
                        c =>
                        c.Name.Equals(_commandCache[sender][index - 1].Name,
                                      StringComparison.InvariantCultureIgnoreCase));
            }

            if (string.IsNullOrEmpty(commandStruct.Name))
            {
                MessageClientTextMessage.SendMessage(sender, "Server",
                                                     string.Format("Command {0} could not be found.", command.Name));
                return;
            }

            command.Name = commandStruct.Name;

            //update security first
            var i = Commands.IndexOf(commandStruct);

            commandStruct.NeededLevel = command.NeededLevel;
            Commands[i] = commandStruct;

            //then send changes
            List <IMyPlayer> players = new List <IMyPlayer>();

            MyAPIGateway.Players.GetPlayers(players, p => p != null);
            foreach (IMyPlayer player in players)
            {
                var playerPermission = Players.FirstOrDefault(p => p.Player.SteamId == player.SteamUserId);

                if (playerPermission.Player.SteamId == 0)
                {
                    //no player found -> send changes
                    SendPermissionChange(player.SteamUserId, commandStruct);
                    continue;
                }

                //don't send changes to players with exeptional permissions
                if (playerPermission.Extensions.Any(s => s.Equals(commandStruct.Name)) ||
                    playerPermission.Restrictions.Any(s => s.Equals(commandStruct.Name)))
                {
                    continue;
                }

                SendPermissionChange(player.SteamUserId, commandStruct);
            }

            if (commandStruct.NeededLevel == uint.MaxValue)
            {
                MessageClientTextMessage.SendMessage(sender, "Server",
                                                     string.Format("The command '{0}' was disabled.", commandStruct.Name));
            }
            else
            {
                MessageClientTextMessage.SendMessage(sender, "Server",
                                                     string.Format("The level of command '{0}' was set to {1}.", commandStruct.Name,
                                                                   commandStruct.NeededLevel));
            }
        }