Commit d3c77168 by Tuukka Kivilahti

Merge branch 'master' of tkfftk@dev.intra.insomnia.fi:/data/bortal

2 parents 6657389e bd99ab66
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
...@@ -13,6 +14,7 @@ import org.slf4j.Logger; ...@@ -13,6 +14,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.facade.AccessRightFacade; import fi.insomnia.bortal.facade.AccessRightFacade;
import fi.insomnia.bortal.facade.RoleFacade;
import fi.insomnia.bortal.facade.UserFacade; import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.AccessRight; import fi.insomnia.bortal.model.AccessRight;
import fi.insomnia.bortal.model.Role; import fi.insomnia.bortal.model.Role;
...@@ -30,6 +32,8 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal { ...@@ -30,6 +32,8 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal {
private UserFacade userfacade; private UserFacade userfacade;
@EJB @EJB
private AccessRightFacade accessRightFacade; private AccessRightFacade accessRightFacade;
@EJB
private RoleFacade roleFacade;
/** /**
* Default constructor. * Default constructor.
...@@ -103,7 +107,18 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal { ...@@ -103,7 +107,18 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal {
return null; return null;
} }
/**
* Makes sure default user and public role exist and the user is member of
* the role.
*/
public User getDefaultUser() { public User getDefaultUser() {
return userfacade.getDefaultUser(); Role publicRole = roleFacade.getOrCreatePublicRole();
User defaultUser = userfacade.getOrCreateDefaultUser();
if (!defaultUser.getRoles().contains(publicRole)) {
ArrayList<Role> userRoles = new ArrayList<Role>();
userRoles.add(publicRole);
defaultUser.setRoles(userRoles);
}
return defaultUser;
} }
} }
...@@ -4,12 +4,16 @@ import javax.ejb.LocalBean; ...@@ -4,12 +4,16 @@ import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import fi.insomnia.bortal.model.Role; import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
@Stateless @Stateless
@LocalBean @LocalBean
public class RoleFacade extends GenericFacade<Role> { public class RoleFacade extends GenericFacade<Role> {
private static final String PUBLIC_ROLE_NAME = "public";
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
...@@ -21,4 +25,26 @@ public class RoleFacade extends GenericFacade<Role> { ...@@ -21,4 +25,26 @@ public class RoleFacade extends GenericFacade<Role> {
return em; return em;
} }
public Role findByName(String name) {
TypedQuery<Role> q = em.createNamedQuery("User.findByName", Role.class);
q.setParameter("name", name);
return q.getSingleResult();
}
public Role getOrCreatePublicRole() {
Role publicRole = findByName(PUBLIC_ROLE_NAME);
if (publicRole == null) {
publicRole = createPublicRole();
}
return publicRole;
}
private Role createPublicRole() {
Role publicRole = new Role();
publicRole.setName(PUBLIC_ROLE_NAME);
em.persist(publicRole);
return publicRole;
}
} }
...@@ -31,7 +31,7 @@ public class UserFacade extends GenericFacade<User> { ...@@ -31,7 +31,7 @@ public class UserFacade extends GenericFacade<User> {
return q.getSingleResult(); return q.getSingleResult();
} }
public User getDefaultUser() { public User getOrCreateDefaultUser() {
User defaultUser = findByLogin(DEFAULT_USER_LOGIN); User defaultUser = findByLogin(DEFAULT_USER_LOGIN);
// Create if doesn't exist yet // Create if doesn't exist yet
......
...@@ -20,14 +20,15 @@ import javax.persistence.NamedQueries; ...@@ -20,14 +20,15 @@ import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery; import javax.persistence.NamedQuery;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.persistence.Version; import javax.persistence.Version;
/** /**
* *
*/ */
@Entity @Entity
@Table(name = "roles") @Table(name = "roles", uniqueConstraints = { @UniqueConstraint(columnNames = { "events_pk_id", "role_name" }) })
@NamedQueries({ @NamedQueries( {
@NamedQuery(name = "Role.findAll", query = "SELECT r FROM Role r"), @NamedQuery(name = "Role.findAll", query = "SELECT r FROM Role r"),
@NamedQuery(name = "Role.findByRoleName", query = "SELECT r FROM Role r WHERE r.name = :name") }) @NamedQuery(name = "Role.findByRoleName", query = "SELECT r FROM Role r WHERE r.name = :name") })
public class Role implements EventChildInterface { public class Role implements EventChildInterface {
...@@ -41,11 +42,11 @@ public class Role implements EventChildInterface { ...@@ -41,11 +42,11 @@ public class Role implements EventChildInterface {
private String name; private String name;
@ManyToMany(cascade = CascadeType.ALL) @ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "role_memberships", joinColumns = {@JoinColumn(name = "roles_id", referencedColumnName = "entity_id"),@JoinColumn(name = "roles_event_id", referencedColumnName = "events_pk_id")}, inverseJoinColumns = @JoinColumn(name = "users_id", referencedColumnName = "users_id")) @JoinTable(name = "role_memberships", joinColumns = { @JoinColumn(name = "roles_id", referencedColumnName = "entity_id"), @JoinColumn(name = "roles_event_id", referencedColumnName = "events_pk_id") }, inverseJoinColumns = @JoinColumn(name = "users_id", referencedColumnName = "users_id"))
private List<User> users; private List<User> users;
@ManyToMany @ManyToMany
@JoinColumns({ @JoinColumns( {
@JoinColumn(name = "role_id", referencedColumnName = "entity_id", nullable = false, updatable = false, insertable = false), @JoinColumn(name = "role_id", referencedColumnName = "entity_id", nullable = false, updatable = false, insertable = false),
@JoinColumn(name = "role_event_id", referencedColumnName = "events_pk_id", nullable = false, updatable = false, insertable = false) }) @JoinColumn(name = "role_event_id", referencedColumnName = "events_pk_id", nullable = false, updatable = false, insertable = false) })
private List<Role> children = new ArrayList<Role>(); private List<Role> children = new ArrayList<Role>();
...@@ -56,7 +57,7 @@ public class Role implements EventChildInterface { ...@@ -56,7 +57,7 @@ public class Role implements EventChildInterface {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "role") @OneToMany(cascade = CascadeType.ALL, mappedBy = "role")
private List<RoleRight> roleRights; private List<RoleRight> roleRights;
@JoinColumns({ @JoinColumns( {
@JoinColumn(name = "card_template_id", referencedColumnName = "entity_id", nullable = false, updatable = false, insertable = false), @JoinColumn(name = "card_template_id", referencedColumnName = "entity_id", nullable = false, updatable = false, insertable = false),
@JoinColumn(name = "card_template_event_id", referencedColumnName = "events_pk_id", nullable = false, updatable = false, insertable = false) }) @JoinColumn(name = "card_template_event_id", referencedColumnName = "events_pk_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne @ManyToOne
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!