/// <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); }
/// <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)); }