Jak dodać wartości w list z klasu niepublicznego

0

Cześć ! Chcę dodać role i rights do zmiennej authorities, nie umiem korzystać z streamów zbytnio, dlatego potrzebowałbym trochę pomocy

import lombok.Data;
import java.util.List;

@Data
public class Access {
    private Role role;
    private String companyId;
    private List<AccessRight> rights;

}
@Data
class AccessRight {
    private List<String> assetTemplateIds;
    private List<String> taskTemplatesIds;
}

Klasa implementująca UserDetails

@Data
@Builder
public class UserDetailsImpl implements UserDetails {

    private String id;
    private String username;
    private String email;
    private String password;
    private Collection<? extends GrantedAuthority> authorities;

    public UserDetailsImpl(String id, String username, String email, String password,
                           Collection<? extends GrantedAuthority> authorities) {
        this.id = id;
        this.username = username;
        this.email = email;
        this.password = password;
        this.authorities = authorities;
    }

    public static UserDetailsImpl build(User user) {
.       // tu jest wporządku, pobieramy nazwy ról z ENUM
        List<GrantedAuthority> authorities = user.getAccesses()
                .stream().map(access -> new SimpleGrantedAuthority(access.getRole().name()))
                .collect(Collectors.toList());
        // w następnych linijkach chcę dodać wartości z assetTemplateIds i taskTemplatesIds, lecz nie jestem pewien jak to zrobić.
       authorities.add()  user.getAccesses()
                .stream().map(role -> new SimpleGrantedAuthority(role.getRights().getAssetTemplateIds()))
                .collect(Collectors.toList());

        authorities.add()  user.getAccesses()
                .stream().map(role -> new SimpleGrantedAuthority(role.getRights().getTaskTemplatesIds()))
                .collect(Collectors.toList());

        return new UserDetailsImpl(
                user.getId(),
                user.getUsername(),
                user.getEmail(),
                user.getPassword(),
                authorities);
    }
...
...
...
1

Nie wiem czy dobrze zrozumiałem Twój use case ale chyba chcesz z jednego obiektu access tworzyć kilka SimpleGrantedAuthority, więc może coś takiego z flatMap może pomóc:

    public class UserDetailsImpl {

        // ...

        public static UserDetailsImpl build(User user) {
            List<GrantedAuthority> authorities = user.getAccesses()
                .stream()
                .flatMap(UserDetailsImpl::mapAccessToAuthorities)
                .collect(Collectors.toList());
            // ...
        }

        private static Stream<SimpleGrantedAuthority> mapAccessToAuthorities(Access access) {
            return Stream.of(
                Stream.of(access.getRole().name()),
                access.getRights().stream()
                    .map(AccessRight::getAssetTemplateIds)
                    .flatMap(Collection::stream),
                access.getRights().stream()
                        .map(AccessRight::getAssetTemplateIds)
                        .flatMap(Collection::stream)
            ).flatMap(Function.identity()).map(SimpleGrantedAuthority::new);
        }
    }
0

Generalnie prawie, ale problem polega na tym że AccessRight to default class, nie public
Image 7.png
Image 8.png

1 użytkowników online, w tym zalogowanych: 0, gości: 1