コード例 #1
0
        private void AddUserGroups(UserInfo item)
        {
            var groups = item.UserPrincipal.GetAuthorizationGroups();

            if (groups != null)
            {
                // iterate over all groups
                foreach (Principal member in groups)
                {
                    // make sure to add only group principals
                    if (member is GroupPrincipal group)
                    {
                        if (Helpers.IsSystemName(true, group.Name))
                        {
                            continue;
                        }

                        var groupInfo = new GroupInfo
                        {
                            Description    = group.Description ?? group.DisplayName,
                            GroupName      = group.Name,
                            GroupPrincipal = group,
                            //IsDanger = item.IsDanger,
                            IsSelected = false
                        };

                        GroupInfos.Add(groupInfo);
                    }
                }
            }
        }
コード例 #2
0
        //private void AddLocalUser(string principal)
        //{
        //    string group, user;

        //    if (principal.Contains("\\"))
        //    {
        //        string[] account = principal.Split('\\');
        //        group = account[0];
        //        user = account[1];
        //    }
        //    else
        //    {
        //        group = string.Empty;
        //        user = principal;
        //    }

        //    var userInfo = new UserInfo(
        //        user,
        //        false,
        //        principal,
        //        user,
        //        group,
        //        Environment.MachineName + ", " + principal,
        //        false
        //    );

        //    if (!UserInfos.Contains(userInfo))
        //    {
        //        UserInfos.Add(userInfo);
        //    }
        //}

        #endregion Users

        #region Groups

        private void AddNestedGroups(RuleInfo item)
        {
            Trace.Assert(item.Principal != null, "No RuleInfo.Pricipal");

            var members = ((GroupPrincipal)item.Principal).GetMembers(); //TODO recursive doesn't work - help required!

            try
            {
                foreach (Principal member in members)
                {
                    if (member is GroupPrincipal group)
                    {
                        if (Helpers.IsSystemName(true, group.Name))
                        {
                            continue;
                        }

                        var groupInfo = new GroupInfo
                        {
                            Description    = group.Description ?? group.DisplayName ?? group.SamAccountName,
                            GroupName      = group.Name,
                            GroupPrincipal = group,
                            //IsDanger = item.IsDanger,
                            IsSelected = false
                        };

                        if (!GroupInfos.Contains(groupInfo))
                        {
                            GroupInfos.Add(groupInfo);
                        }
                    }
                }
            }
            catch { } // No network
        }
コード例 #3
0
        public void SetRuleSelected()
        {
            if (_inAction)
            {
                return;
            }

            _inAction = true;

            UserInfos.Clear();
            GroupInfos.Clear();

            foreach (var item in RuleInfos)
            {
                if (item.IsSelected)
                {
                    if (item.Principal != null)
                    {
                        AddRuleUsers(item);
                    }

                    if (item.IsGroup)
                    {
                        AddNestedGroups(item);
                    }
                }
            }

            _inAction = false;
        }
コード例 #4
0
    /// <summary>
    /// 初始化方块组
    /// </summary>
    public void Init()
    {
        GroupInfos groupInfos = transform.parent.GetComponent <GroupInfos>();

        // 销毁当前方块
        foreach (Cube cube in GetComponentsInChildren <Cube>())
        {
            Destroy(cube.gameObject);
        }
        // 随机选择一个结构
        info = groupInfos.infos[Random.Range(0, groupInfos.infoSize)];
        // 构建新方块
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                for (int k = 0; k < 3; k++)
                {
                    if (info[i, j, k])
                    {
                        GameObject cube = GameObject.Instantiate(Cubepre, transform);
                        // 相对于中心的位置生成方块
                        cube.transform.localPosition = new Vector3(k - 0.5f - 1, i - 1, j - 0.5f - 1);
                    }
                }
            }
        }
    }
コード例 #5
0
        public void SetUserSelected()
        {
            if (_inAction)
            {
                return;
            }

            _inAction = true;

            GroupInfos.Clear();

            foreach (var item in UserInfos)
            {
                if (item.IsSelected)
                {
                    AddUserGroups(item);
                }
            }

            _inAction = false;
        }
コード例 #6
0
        public static void LoadGameRewardInfo()
        {
            GroupInfos.Clear();
            GroupRateInfos.Clear();
            SubGroupInfos.Clear();
            using (var con = new MySqlConnection(Conf.Connstr))
            {
                con.Open();
                using (var cmd = new MySqlCommand(string.Empty, con))
                {
                    cmd.Parameters.Clear();
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "usp_gameReward_GetGroupInfo";
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            int Key = Convert.ToInt32(reader["groupNum"]);
                            GameRewardGroupInfo info = new GameRewardGroupInfo
                            {
                                GroupType         = Convert.ToInt16(reader["groupType"]),
                                Argument          = Convert.ToInt32(reader["arg"]),
                                ChildGroupNum     = Convert.ToInt32(reader["childGroupNum"]),
                                SpecialRewardRate = Convert.ToSingle(reader["specialRewardRate"])
                            };
                            GroupInfos.TryAdd(Key, info);
                        }
                    }
                }
            }

            using (var con = new MySqlConnection(Conf.Connstr))
            {
                con.Open();
                using (var cmd = new MySqlCommand(string.Empty, con))
                {
                    cmd.Parameters.Clear();
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "usp_gameReward_GetGroupRate";
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            int Key = Convert.ToInt32(reader["groupNum"]);
                            GameRewardGroupRate info = new GameRewardGroupRate
                            {
                                GroupNum   = Key,
                                SubGroup   = Convert.ToInt32(reader["subGroupNum"]),
                                Rate       = Convert.ToSingle(reader["rate"]),
                                RewardType = Convert.ToInt16(reader["rewardType"]),
                                RewardID   = Convert.ToInt32(reader["rewardID"]),
                                Amount     = Convert.ToInt32(reader["amount"])
                            };
                            if (info.RewardID != 46235 && (info.RewardID < 27685 || info.RewardID > 27709)) //unknown item
                            {
                                GroupRateInfos.AddOrUpdate(Key, new List <GameRewardGroupRate> {
                                    info
                                }, (k, v) => { v.Add(info); return(v); });
                            }
                        }
                    }
                }
            }
            using (var con = new MySqlConnection(Conf.Connstr))
            {
                con.Open();
                using (var cmd = new MySqlCommand(string.Empty, con))
                {
                    cmd.Parameters.Clear();
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "usp_gameReward_GetSubGroupInfo";
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            int Key1 = Convert.ToInt32(reader["groupNum"]);
                            int Key2 = Convert.ToInt32(reader["subGroupNum"]);
                            GameRewardSubGroupInfo info = new GameRewardSubGroupInfo
                            {
                                SubGroup       = Key2,
                                SubGroupType   = Convert.ToInt32(reader["subGroupType"]),
                                SubGroupRate   = Convert.ToSingle(reader["subGroupRate"]),
                                StartRank      = Convert.ToByte(reader["startRank"]),
                                EndRank        = Convert.ToByte(reader["endRank"]),
                                RaceRate       = Convert.ToInt32(reader["raceRate"]),
                                OnePlusOneRate = Convert.ToSingle(reader["onePlusOneRate"])
                            };
                            SubGroupInfos.Add(Key1, Key2, info);
                        }
                    }
                }
            }
            Log.Info("Load GameRewardInfo Done!");

            /*Random rnd = new Random();
             * int rand = rnd.Next() % 1000000;
             * //Log.Info("rnd {0}", rnd.Next() % 1000000);
             * Dictionary<int, short> RewardGroupList = new Dictionary<int, short>();
             *
             * var type1 = GameRewardHolder.GroupInfos.FirstOrDefault(f => f.Value.GroupType == 1 && f.Value.Argument == 1);
             * if (type1.Value != null)
             *  RewardGroupList.Add(type1.Key, type1.Value.GroupType);
             * var type2 = GameRewardHolder.GroupInfos.FirstOrDefault(f => f.Value.GroupType == 2 && f.Value.Argument == 4040);
             * if (type2.Value != null)
             * {
             *  RewardGroupList.Add(type2.Key, type2.Value.GroupType);
             *  if (type2.Value.ChildGroupNum > 0)
             *  {
             *      GameRewardHolder.GroupInfos.TryGetValue(type2.Value.ChildGroupNum, out var childgp);
             *      RewardGroupList.Add(type2.Value.ChildGroupNum, childgp.GroupType);
             *  }
             * }
             *
             * string rewardGroupNumList = string.Empty;
             * string rewardSubGroupList = string.Empty;
             * string rewardTypeList = string.Empty;
             * string rewardIDList = string.Empty;
             * string rewardAmountList = string.Empty;
             *
             * Random rand = new Random(Guid.NewGuid().GetHashCode());
             * foreach (var group in RewardGroupList)
             * {
             *  if (GameRewardHolder.GroupRateInfos.TryGetValue(group.Key, out var grouprateinfos))
             *  {
             *      var subgroup = grouprateinfos;
             *      if (group.Value == 1) //type
             *      {
             *          GameRewardHolder.SubGroupInfos.TryGetValue(group.Key, out var subgroupinfos);
             *          int subgroupnum = 0;
             *          double r0 = rand.NextDouble() * subgroupinfos.Values.Sum(s => s.SubGroupRate);
             *          double min0 = 0, max0 = 0;
             *          foreach (var igroup in subgroupinfos.Values.OrderBy(o => o.SubGroupRate))
             *          {
             *              max0 += igroup.SubGroupRate;
             *              if (min0 <= r0 && r0 < max0)
             *              {
             *                  subgroupnum = igroup.SubGroup;
             *                  break;
             *              }
             *              min0 = max0;
             *          }
             *          subgroup = grouprateinfos.Where(w => w.SubGroup == subgroupnum).ToList();
             *      }
             *
             *      double r = rand.NextDouble() * subgroup.Sum(s => s.Rate);
             *      double min = 0, max = 0;
             *      foreach (var item in subgroup.OrderBy(o => o.Rate))
             *      {
             *          max += item.Rate;
             *          if (min <= r && r < max)
             *          {
             *              if (GameRewardHolder.SubGroupInfos.TryGetValue(group.Key, item.SubGroup, out var subgroupinfo))
             *              {
             *                  //getitem.Add(item);
             *                  rewardGroupNumList += string.Format("{0},", item.GroupNum);
             *                  rewardSubGroupList += string.Format("{0},", item.SubGroup);
             *                  rewardTypeList += string.Format("{0},", item.RewardType);
             *                  rewardIDList += string.Format("{0},", item.RewardID);
             *                  rewardAmountList += string.Format("{0},", item.Amount);
             *              }
             *              break;
             *
             *          }
             *          min = max;
             *      }
             *
             *  }
             * }
             *
             * Log.Info("rewardIDList {0}", rewardIDList);
             */
        }
コード例 #7
0
        public void SetPathSelected(FileSystemInfo info)
        {
            if (_inAction)
            {
                return;
            }

            _inAction = true;

            RuleInfos.Clear();
            UserInfos.Clear();
            GroupInfos.Clear();

            SelectedFileSystemInfo = info;

            try
            {
                AuthorizationRuleCollection rules;
                bool container = info is DirectoryInfo;

                if (container)
                {
                    DirectorySecurity security = Directory.GetAccessControl(info.FullName);
                    rules = security.GetAccessRules(true, true, typeof(NTAccount));
                }
                else
                {
                    FileSecurity security = File.GetAccessControl(info.FullName);
                    rules = security.GetAccessRules(true, true, typeof(NTAccount));
                }

                foreach (FileSystemAccessRule rule in rules)
                {
                    var  identityValue = rule.IdentityReference.Value;
                    var  principal     = Helpers.FindByIdentity(identityValue);
                    bool isGroup       = principal is GroupPrincipal; // principal.IsSecurityGroup?

                    if (principal == null)                            // user "NT AUTHORITY\"
                    {
                        continue;
                    }

                    string name = isGroup ? principal.Name : principal.SamAccountName;

                    if (Helpers.IsSystemName(isGroup, name))
                    {
                        continue;
                    }

                    bool deny    = rule.AccessControlType.HasFlag(AccessControlType.Deny);
                    bool danger  = false;
                    bool transit = false;
                    var  flags   = new StringBuilder();

                    if (deny)
                    {
                        _ = flags.Append(_rightDeny);

                        if (rule.FileSystemRights.HasFlag(FileSystemRights.Write) ||
                            rule.FileSystemRights.HasFlag(FileSystemRights.Delete) ||
                            rule.FileSystemRights.HasFlag(FileSystemRights.DeleteSubdirectoriesAndFiles))
                        {
                            _ = flags.Append(_rightWrite);
                        }
                    }
                    else
                    {
                        if (rule.FileSystemRights.HasFlag(FileSystemRights.FullControl))
                        {
                            danger = true;
                            _      = flags.Append(_rightFull);
                        }

                        if (rule.FileSystemRights.HasFlag(FileSystemRights.ReadAndExecute))
                        {
                            if (container && rule.InheritanceFlags.Equals(InheritanceFlags.None))
                            {
                                transit = true;
                                _       = flags.Append(_rightTransit);
                            }
                            else
                            {
                                _ = flags.Append(_rightRead);
                            }
                        }

                        if (rule.FileSystemRights.HasFlag(FileSystemRights.Modify) ||
                            rule.FileSystemRights.HasFlag(FileSystemRights.Delete))
                        {
                            danger = true;
                            _      = flags.Append(_rightWrite);
                        }
                    }

                    string domain = Environment.UserDomainName;

                    var ruleInfo = new RuleInfo
                    {
                        Comment       = Helpers.GetRightsEnum(rule),
                        Deny          = deny,
                        Domain        = identityValue.StartsWith(domain),
                        Flags         = flags.ToString(),
                        IsDanger      = danger,
                        IsGroup       = isGroup,
                        IsInherited   = rule.IsInherited,
                        IsSelected    = false,
                        IsTransit     = transit,
                        Principal     = principal,
                        PrincipalName = name,
                        Rule          = rule
                    };

                    RuleInfos.Add(ruleInfo);

                    //if (principal != null) // continue above
                    //{
                    AddRuleUsers(ruleInfo);
                    //}

                    if (isGroup)
                    {
                        AddNestedGroups(ruleInfo);
                    }
                }
            }
            catch { }

            _inAction = false;
        }