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); } } } }
//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 }
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; }
/// <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); } } } } }
public void SetUserSelected() { if (_inAction) { return; } _inAction = true; GroupInfos.Clear(); foreach (var item in UserInfos) { if (item.IsSelected) { AddUserGroups(item); } } _inAction = false; }
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); */ }
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; }