package org.dicadeveloper.weplantaforest.admin.user; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.persistence.CollectionTable; import javax.persistence.Column; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import org.dicadeveloper.weplantaforest.admin.team.Team; import org.dicadeveloper.weplantaforest.admin.views.Views; import org.dicadeveloper.weplantaforest.common.support.Language; import org.dicadeveloper.weplantaforest.common.user.Role; import org.springframework.hateoas.Identifiable; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonView; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; @Entity @Getter @Setter @EqualsAndHashCode @Table(name = "User") public class User implements Identifiable<Long>, UserDetails { /** * */ private static final long serialVersionUID = -3845260664014536983L; @Id @GeneratedValue @Column(name = "_userId") @JsonView({ Views.OverviewUser.class, Views.ProjectData.class, Views.EventDetails.class}) private Long id; @Column(unique = true, name = "_name") @JsonView({ Views.OverviewCart.class, Views.OverviewUser.class, Views.ProjectData.class, Views.EventDetails.class }) private String name; @Column(name = "_password") private String password; @Column(name = "_email", length = 500) @JsonView(Views.OverviewUser.class) private String mail; @Column(name = "_enabled", nullable = false) @JsonView(Views.OverviewUser.class) private boolean enabled = false; @Column(name = "_banned", nullable = false) @JsonView(Views.OverviewUser.class) private boolean banned = false; @Column(name = "_regDate") private Long regDate; @Column(name = "_lastVisit") private Long lastVisit; @Column(name = "_organisationType") private int organizationType; @Column(name = "_imageName") private String imageName; @Column(name = "_aboutme") private String aboutMe; @Column(name = "_location") private String location; @Column(name = "_organisation") private String organisation; @Column(name ="_homepage") private String homepage; @Column(name ="_lang") private Language lang; @Column(name ="_newsletter") private boolean newsletter; @Column(name = "_activationKey") private String activationKey; @ManyToOne(optional = true) @JoinColumn(name = "_team__teamId") private Team team; @Enumerated(EnumType.ORDINAL) @ElementCollection(fetch = FetchType.EAGER) @CollectionTable(name = "User__roles", joinColumns = @JoinColumn(name = "USER__USERID") ) @Column(name = "ELEMENT") private Set<Role> roles = new HashSet<Role>(); public void addRole(final Role role) { roles.add(role); } public void removeRole(final Role role) { roles.remove(role); } public boolean hasRole(Role role) { return roles.contains(role); } @JsonView(Views.OverviewUser.class) public boolean isAdmin() { return roles.contains(Role.ADMIN); } @JsonView(Views.OverviewUser.class) public boolean isArticleManager() { return roles.contains(Role.ARTICLE_MANAGER); } @Override @JsonIgnore public Collection<? extends GrantedAuthority> getAuthorities() { List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); for (Role role : roles) { authorities.add(new SimpleGrantedAuthority("ROLE_" + role.getIdentifier())); } return authorities; } @Override public String toString() { return "'" + name + "'(" + mail + ")[" + id + "]"; } @Override public String getUsername() { return name; } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return enabled; } @Override public boolean isCredentialsNonExpired() { return true; } }