12
12
import java .util .Collection ;
13
13
import java .util .Collections ;
14
14
import java .util .List ;
15
+ import java .util .Objects ;
15
16
import java .util .stream .Collectors ;
17
+ import javax .annotation .Nullable ;
16
18
import lombok .RequiredArgsConstructor ;
19
+ import lombok .extern .slf4j .Slf4j ;
17
20
import org .springframework .http .ResponseEntity ;
18
21
import org .springframework .security .core .context .ReactiveSecurityContextHolder ;
19
22
import org .springframework .security .core .context .SecurityContext ;
23
26
24
27
@ RestController
25
28
@ RequiredArgsConstructor
29
+ @ Slf4j
26
30
public class AccessController implements AuthorizationApi {
27
31
28
32
private final AccessControlService accessControlService ;
29
33
30
34
public Mono <ResponseEntity <AuthenticationInfoDTO >> getUserAuthInfo (ServerWebExchange exchange ) {
31
- AuthenticationInfoDTO dto = new AuthenticationInfoDTO ();
32
- dto .setRbacEnabled (accessControlService .isRbacEnabled ());
33
- UserInfoDTO userInfo = new UserInfoDTO ();
34
-
35
35
Mono <List <UserPermissionDTO >> permissions = accessControlService .getUser ()
36
36
.map (user -> accessControlService .getRoles ()
37
37
.stream ()
@@ -49,13 +49,11 @@ public Mono<ResponseEntity<AuthenticationInfoDTO>> getUserAuthInfo(ServerWebExch
49
49
return userName
50
50
.zipWith (permissions )
51
51
.map (data -> {
52
- userInfo .setUsername (data .getT1 ());
53
- userInfo .setPermissions (data .getT2 ());
54
-
55
- dto .setUserInfo (userInfo );
52
+ var dto = new AuthenticationInfoDTO (accessControlService .isRbacEnabled ());
53
+ dto .setUserInfo (new UserInfoDTO (data .getT1 (), data .getT2 ()));
56
54
return dto ;
57
55
})
58
- .switchIfEmpty (Mono .just (dto ))
56
+ .switchIfEmpty (Mono .just (new AuthenticationInfoDTO ( accessControlService . isRbacEnabled ()) ))
59
57
.map (ResponseEntity ::ok );
60
58
}
61
59
@@ -70,11 +68,22 @@ private List<UserPermissionDTO> mapPermissions(List<Permission> permissions, Lis
70
68
dto .setActions (permission .getActions ()
71
69
.stream ()
72
70
.map (String ::toUpperCase )
73
- .map (ActionDTO ::valueOf )
71
+ .map (this ::mapAction )
72
+ .filter (Objects ::nonNull )
74
73
.collect (Collectors .toList ()));
75
74
return dto ;
76
75
})
77
76
.collect (Collectors .toList ());
78
77
}
79
78
79
+ @ Nullable
80
+ private ActionDTO mapAction (String name ) {
81
+ try {
82
+ return ActionDTO .fromValue (name );
83
+ } catch (IllegalArgumentException e ) {
84
+ log .warn ("Unknown Action [{}], skipping" , name );
85
+ return null ;
86
+ }
87
+ }
88
+
80
89
}
0 commit comments