package com.tourguide.security; import com.tourguide.modules.user.domain.ClientType; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import java.util.Collections; import java.util.ArrayList; import java.util.Collection; import java.util.List; public class AppUserPrincipal { private final Long userId; private final String username; private final String role; private final ClientType clientType; private final List menuCodes; public AppUserPrincipal(Long userId, String username, String role, ClientType clientType) { this(userId, username, role, clientType, Collections.emptyList()); } public AppUserPrincipal(Long userId, String username, String role, ClientType clientType, Collection menuCodes) { this.userId = userId; this.username = username; this.role = role; this.clientType = clientType; this.menuCodes = new ArrayList(menuCodes); } public Long getUserId() { return userId; } public String getUsername() { return username; } public String getRole() { return role; } public ClientType getClientType() { return clientType; } public List getMenuCodes() { return Collections.unmodifiableList(menuCodes); } public List getAuthorities() { if (clientType == ClientType.ADMIN) { List authorities = new ArrayList(); authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN")); if (!"ADMIN".equals(role)) { authorities.add(new SimpleGrantedAuthority("ROLE_" + role)); } for (String menuCode : menuCodes) { authorities.add(new SimpleGrantedAuthority("PERM_" + menuCode)); } return authorities; } return Collections.singletonList(new SimpleGrantedAuthority("ROLE_" + role)); } }