package se.sperber.cryson.examples.advancedcrysondiary.model;
import org.hibernate.annotations.BatchSize;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import se.sperber.cryson.security.Restrictable;
import javax.persistence.*;
import java.util.Date;
import java.util.Set;
@Entity
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Entry extends BaseEntity implements Restrictable {
private String title;
@OneToOne(fetch = FetchType.LAZY, optional = false)
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private EntryContent content;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "entry")
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@BatchSize(size = 10)
private Set<EntryComment> comments;
private Date date;
@Column(nullable = false)
private String userName;
public String getTitle() {
return title;
}
public String getUserName() {
return userName;
}
public boolean isReadableBy(Authentication authentication) {
return authentication.getPrincipal().equals(userName) || authentication.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_LURKER"));
}
public boolean isWritableBy(Authentication authentication) {
return !authentication.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_LURKER")) && authentication.getPrincipal().equals(userName);
}
}