/// <inheritdoc />
        public bool Process(OperationProcessorContext context)
        {
            context.OperationDescription.Operation.Security ??= new List <OpenApiSecurityRequirement>();
            OpenApiSecurityRequirement perms = context.MethodInfo.GetCustomAttributes <UserOnlyAttribute>()
                                               .Aggregate(new OpenApiSecurityRequirement(), (agg, cur) =>
            {
                agg[nameof(Kyoo)] = Array.Empty <string>();
                return(agg);
            });

            perms = context.MethodInfo.GetCustomAttributes <PermissionAttribute>()
                    .Aggregate(perms, (agg, cur) =>
            {
                ICollection <string> permissions = _GetPermissionsList(agg, cur.Group);
                permissions.Add($"{cur.Type}.{cur.Kind.ToString().ToLower()}");
                agg[nameof(Kyoo)] = permissions;
                return(agg);
            });

            PartialPermissionAttribute controller = context.ControllerType
                                                    .GetCustomAttribute <PartialPermissionAttribute>();

            if (controller != null)
            {
                perms = context.MethodInfo.GetCustomAttributes <PartialPermissionAttribute>()
                        .Aggregate(perms, (agg, cur) =>
                {
                    Group group = controller.Group != Group.Overall
                                                        ? controller.Group
                                                        : cur.Group;
                    string type = controller.Type ?? cur.Type;
                    Kind kind   = controller.Type == null
                                                        ? controller.Kind
                                                        : cur.Kind;
                    ICollection <string> permissions = _GetPermissionsList(agg, group);
                    permissions.Add($"{type}.{kind.ToString().ToLower()}");
                    agg[nameof(Kyoo)] = permissions;
                    return(agg);
                });
            }

            context.OperationDescription.Operation.Security.Add(perms);
            return(true);
        }
Exemple #2
0
 /// <inheritdoc />
 public IFilterMetadata Create(PartialPermissionAttribute attribute)
 {
     return(new PassthroughValidator());
 }
 /// <inheritdoc />
 public IFilterMetadata Create(PartialPermissionAttribute attribute)
 {
     return(new PermissionValidatorFilter((object)attribute.Type ?? attribute.Kind, attribute.Group, _options));
 }