private async Task <EntityResponse <_EntityType> > CheckPermission
            (_EntityType entity, Actor currentActor,
            ClaimsPrincipal currentPrincipal)
        {
            var checkModel = new CheckQueryPermissionModel <_EntityType>
            {
                Entity    = entity,
                Actor     = currentActor,
                Principal = currentPrincipal
            };

            var validator       = new EntityQueryPermissionValidator <_EntityType>();
            var validatorResult = await validator
                                  .ValidateAsync(checkModel)
                                  .ConfigureAwait(false);

            if (!validatorResult.IsValid)
            {
                var errors = validatorResult.Errors
                             .Select(x => x.ErrorMessage);
                return(ErrorResult(errors));
            }

            return(new EntityResponse <_EntityType>
            {
                Success = true,
                Entity = entity
            });
        }
        private async Task <EntityResponse <GeoTask> > CheckPermission
            (GeoTask task, Actor actor, Project project)
        {
            ActorRole currentActorProjectRole = null;

            if (project != null && actor != null)
            {
                project.ProjectActorRoles.TryGetValue(actor.Id,
                                                      out currentActorProjectRole);
            }
            var checkModel = new CheckQueryPermissionModel <GeoTask>
            {
                Entity           = task,
                Actor            = actor,
                ProjectActorRole = currentActorProjectRole
            };
            var validator       = new GeoTaskQueryPermissionValidator();
            var validatorResult = await validator.ValidateAsync(checkModel)
                                  .ConfigureAwait(false);

            if (!validatorResult.IsValid)
            {
                return(ErrorResult(validatorResult.Errors
                                   .Select(x => x.ErrorMessage)));
            }
            return(new EntityResponse <GeoTask>
            {
                Success = true,
                Entity = task
            });
        }