Exemplo n.º 1
0
        public static async Task CheckStatusAsync(this ContentOperation operation, Status status)
        {
            if (operation.SchemaDef.Type != SchemaType.Singleton)
            {
                var workflow = GetWorkflow(operation);

                var statusInfo = await workflow.GetInfoAsync(operation.Snapshot, status);

                if (statusInfo == null)
                {
                    operation.AddError(T.Get("contents.statusNotValid"), nameof(status));
                    operation.ThrowOnErrors();
                }
            }
        }
Exemplo n.º 2
0
        public static Task <ContentData> ExecuteCreateScriptAsync(this ContentOperation operation, ContentData data, Status status)
        {
            var script = operation.SchemaDef.Scripts.Create;

            if (string.IsNullOrWhiteSpace(script))
            {
                return(Task.FromResult(data));
            }

            // Script vars are just wrappers over dictionaries for better performance.
            var vars = Enrich(operation, new ContentScriptVars
            {
                Data      = data,
                DataOld   = null,
                OldData   = null,
                OldStatus = default,
Exemplo n.º 3
0
        public static async Task CheckTransitionAsync(this ContentOperation operation, Status status)
        {
            if (operation.SchemaDef.Type != SchemaType.Singleton)
            {
                var workflow = GetWorkflow(operation);

                var oldStatus = operation.Snapshot.EditingStatus();

                if (!await workflow.CanMoveToAsync(operation.Snapshot, oldStatus, status, operation.User))
                {
                    var values = new { oldStatus, newStatus = status };

                    operation.AddError(T.Get("contents.statusTransitionNotAllowed", values), nameof(status));
                    operation.ThrowOnErrors();
                }
            }
        }
Exemplo n.º 4
0
        private static ContentValidator GetValidator(this ContentOperation operation, bool optimize, bool published)
        {
            var validationContext =
                new ValidationContext(operation.Resolve <IJsonSerializer>(),
                                      operation.App.NamedId(),
                                      operation.Schema.NamedId(),
                                      operation.SchemaDef,
                                      operation.Components,
                                      operation.CommandId)
                .Optimized(optimize).AsPublishing(published);

            var validator =
                new ContentValidator(operation.Partition(),
                                     validationContext,
                                     operation.Resolve <IEnumerable <IValidatorsFactory> >(),
                                     operation.Resolve <ILogger <ContentValidator> >());

            return(validator);
        }
        public static Task <ContentData> ExecuteUpdateScriptAsync(this ContentOperation operation, ContentData data)
        {
            var script = operation.SchemaDef.Scripts.Update;

            if (string.IsNullOrWhiteSpace(script))
            {
                return(Task.FromResult(data));
            }

            var vars = Enrich(operation, new ScriptVars
            {
                [ScriptKeys.Data]      = data,
                [ScriptKeys.DataOld]   = operation.Snapshot.Data,
                [ScriptKeys.OldData]   = operation.Snapshot.Data,
                [ScriptKeys.OldStatus] = data,
                [ScriptKeys.Operation] = "Update",
                [ScriptKeys.Status]    = operation.Snapshot.EditingStatus(),
                [ScriptKeys.StatusOld] = default(Status)
            });

            return(TransformAsync(operation, script, vars));
        }
        public static Task ExecuteDeleteScriptAsync(this ContentOperation operation)
        {
            var script = operation.SchemaDef.Scripts.Delete;

            if (string.IsNullOrWhiteSpace(script))
            {
                return(Task.CompletedTask);
            }

            var vars = Enrich(operation, new ScriptVars
            {
                [ScriptKeys.Data]      = operation.Snapshot.Data,
                [ScriptKeys.DataOld]   = null,
                [ScriptKeys.OldData]   = null,
                [ScriptKeys.OldStatus] = operation.Snapshot.EditingStatus(),
                [ScriptKeys.Operation] = "Delete",
                [ScriptKeys.Status]    = operation.Snapshot.EditingStatus(),
                [ScriptKeys.StatusOld] = default(Status)
            });

            return(ExecuteAsync(operation, script, vars));
        }
Exemplo n.º 7
0
        public static void MustHavePermission(this ContentOperation context, string permissionId)
        {
            var content = context.Snapshot;

            if (Equals(content.CreatedBy, context.Actor) || context.User == null)
            {
                return;
            }

            var permissions = context.User?.Claims.Permissions();

            if (permissions == null)
            {
                throw new DomainForbiddenException(T.Get("common.errorNoPermission"));
            }

            var permission = Permissions.ForApp(permissionId, context.App.Name, context.Schema.SchemaDef.Name);

            if (!permissions.Allows(permission))
            {
                throw new DomainForbiddenException(T.Get("common.errorNoPermission"));
            }
        }
Exemplo n.º 8
0
 public static void GenerateDefaultValues(this ContentOperation operation, ContentData data)
 {
     data.GenerateDefaultValues(operation.Schema.SchemaDef, operation.Partition());
 }
Exemplo n.º 9
0
 private static PartitionResolver Partition(this ContentOperation operation)
 {
     return(operation.App.PartitionResolver());
 }
Exemplo n.º 10
0
 private static IContentWorkflow GetWorkflow(ContentOperation operation)
 {
     return(operation.Resolve <IContentWorkflow>());
 }
Exemplo n.º 11
0
        public static ValueTask <bool> ShouldValidateAsync(this ContentOperation operation, Status status)
        {
            var workflow = GetWorkflow(operation);

            return(workflow.ShouldValidateAsync(operation.Schema, status));
        }
Exemplo n.º 12
0
        public static ValueTask <Status> GetInitialStatusAsync(this ContentOperation operation)
        {
            var workflow = GetWorkflow(operation);

            return(workflow.GetInitialStatusAsync(operation.Schema));
        }
Exemplo n.º 13
0
 private static async Task ExecuteAsync(ContentOperation operation, string script, ScriptVars vars)
 {
     await operation.Resolve <IScriptEngine>().ExecuteAsync(vars, script, Options);
 }
Exemplo n.º 14
0
 private static async Task <ContentData> TransformAsync(ContentOperation operation, string script, ScriptVars vars)
 {
     return(await operation.Resolve <IScriptEngine>().TransformAsync(vars, script, Options));
 }