1
- using System . Collections . Generic ;
1
+ using System . Collections . Generic ;
2
2
using System . Linq ;
3
3
using Swashbuckle . AspNetCore . Swagger ;
4
4
using Swashbuckle . AspNetCore . SwaggerGen ;
@@ -10,21 +10,33 @@ public class SecurityRequirementsOperationFilter : IOperationFilter
10
10
{
11
11
public void Apply ( Operation operation , OperationFilterContext context )
12
12
{
13
- var controllerPermissions = context . ApiDescription . ControllerAttributes ( )
14
- . OfType < AbpAuthorizeAttribute > ( )
15
- . Select ( attr => attr . Permissions ) ;
13
+ var actionAttrs = context . ApiDescription . ActionAttributes ( ) ;
14
+ if ( actionAttrs . OfType < AbpAllowAnonymousAttribute > ( ) . Any ( ) )
15
+ {
16
+ return ;
17
+ }
16
18
17
- var actionPermissions = context . ApiDescription . ActionAttributes ( )
18
- . OfType < AbpAuthorizeAttribute > ( )
19
- . Select ( attr => attr . Permissions ) ;
19
+ var controllerAttrs = context . ApiDescription . ControllerAttributes ( ) ;
20
+ var actionAbpAuthorizeAttrs = actionAttrs . OfType < AbpAuthorizeAttribute > ( ) ;
20
21
21
- var permissions = controllerPermissions . Union ( actionPermissions ) . Distinct ( )
22
- . SelectMany ( p => p ) ;
22
+ if ( ! actionAbpAuthorizeAttrs . Any ( ) && controllerAttrs . OfType < AbpAllowAnonymousAttribute > ( ) . Any ( ) )
23
+ {
24
+ return ;
25
+ }
23
26
24
- if ( permissions . Any ( ) )
27
+ var controllerAbpAuthorizeAttrs = controllerAttrs . OfType < AbpAuthorizeAttribute > ( ) ;
28
+ if ( controllerAbpAuthorizeAttrs . Any ( ) || actionAbpAuthorizeAttrs . Any ( ) )
25
29
{
26
30
operation . Responses . Add ( "401" , new Response { Description = "Unauthorized" } ) ;
27
- operation . Responses . Add ( "403" , new Response { Description = "Forbidden" } ) ;
31
+
32
+ var permissions = controllerAbpAuthorizeAttrs . Union ( actionAbpAuthorizeAttrs )
33
+ . SelectMany ( p => p . Permissions )
34
+ . Distinct ( ) ;
35
+
36
+ if ( permissions . Any ( ) )
37
+ {
38
+ operation . Responses . Add ( "403" , new Response { Description = "Forbidden" } ) ;
39
+ }
28
40
29
41
operation . Security = new List < IDictionary < string , IEnumerable < string > > >
30
42
{
0 commit comments