示例#1
0
        protected virtual TagTargetOpResult PerformTagOperation(IList <Target> targets, IList <Tag> tags, bool IsAssignOperation = true)
        {
            IList <Target> resultTargets = new List <Target>();
            IList <Tag>    resultTags    = new List <Tag>();

            foreach (var target in targets)
            {
                //Target queriedTarget = targetRepository.GetAll().Include("TagTargets.Tag").FirstOrDefault(t => t.Id == target.Id);
                Target queriedTarget = targetRepository.FirstOrDefault(t => t.Id == target.Id);
                //ICollection<Tag> assignedTags = queriedTarget.AssignedTags;

                foreach (var tag in tags)
                {
                    //Tag queriedTag = tagRepository.GetAll().Include("TagTargets.Target").FirstOrDefault(t => t.Id == tag.Id);
                    Tag queriedTag = tagRepository.FirstOrDefault(t => t.Id == tag.Id);
                    //ICollection<Target> taggedTargets = queriedTag.TaggedTargets;

                    if (IsAssignOperation)
                    {
                        if (queriedTag.HasTarget(queriedTarget))
                        {
                            continue;
                        }

                        //queriedTarget.AppendTag(queriedTag);
                        queriedTag.AssignToTarget(queriedTarget);
                    }
                    else
                    {
                        if (!queriedTarget.HasTag(queriedTag))
                        {
                            continue;
                        }

                        //queriedTarget.RemoveTag(queriedTag);
                        queriedTag.DismissTarget(queriedTarget);
                    }

                    tagRepository.Update(queriedTag);
                    if (!resultTags.Contains(queriedTag))
                    {
                        resultTags.Add(queriedTag);
                    }
                }

                //targetRepository.Update(queriedTarget);
                if (!resultTargets.Contains(queriedTarget))
                {
                    resultTargets.Add(queriedTarget);
                }
            }

            return(new TagTargetOpResult()
            {
                Targets = resultTargets,
                Tags = resultTags
            });
        }
示例#2
0
文件: Add.cs 项目: asalih/GuardianUI
            public async Task <CommandResult <FirewallRuleDto> > Handle(Command message, CancellationToken cancellationToken)
            {
                var target = await _targetRepository.FirstOrDefault(s => s.Id == message.FirewallRule.TargetId);

                if (target == null)
                {
                    return(new CommandResult <FirewallRuleDto>()
                    {
                        IsSucceeded = true,
                        Message = "Target not found!"
                    });
                }

                message.FirewallRule.Id        = Guid.NewGuid();
                message.FirewallRule.CreatedAt = DateTime.UtcNow;

                var firewallRule = _mapper.Map <Infrastructure.Entity.FirewallRule>(message.FirewallRule);

                var expr = _parser.GetRules(firewallRule.Expression);

                if (expr.Item2 && expr.Item1?.Any() == true)
                {
                    foreach (var item in expr.Item1)
                    {
                        if (item.Action == null)
                        {
                            continue;
                        }

                        item.Action.Phase = firewallRule.RuleFor == Infrastructure.Entity.RuleFor.Request ? 1 : 3;
                    }
                }
                else
                {
                    return(new CommandResult <FirewallRuleDto>()
                    {
                        IsSucceeded = false,
                        Message = "Can't parse given rule!",
                        Result = _mapper.Map <FirewallRuleDto>(firewallRule)
                    });
                }

                firewallRule.SerializedExpression = JsonConvert.SerializeObject(expr);

                await _repository.Add(firewallRule);

                return(new CommandResult <FirewallRuleDto>()
                {
                    IsSucceeded = true,
                    Message = "Firewall rule successfully created!",
                    Result = _mapper.Map <FirewallRuleDto>(firewallRule)
                });
            }