Roberto Sánchez
2014-01-18 602c4c4501dcd89cbce1d6ba61ba6bc75761d643
securis/src/main/java/net/curisit/securis/services/SecurityInterceptor.java
....@@ -3,6 +3,7 @@
33 import java.io.IOException;
44 import java.lang.reflect.Method;
55 import java.util.List;
6
+import java.util.Set;
67
78 import javax.inject.Inject;
89 import javax.persistence.EntityManager;
....@@ -60,8 +61,27 @@
6061 log.info("User {} has no necessary role to access url: {}", username, servletRequest.getPathInfo());
6162 containerRequestContext.abortWith(Response.status(Status.UNAUTHORIZED).build());
6263 }
64
+ Set<Integer> orgs = getUserOrganizations(username);
65
+ servletRequest.setAttribute("user_orgs", orgs);
6366 }
6467 }
68
+ }
69
+
70
+ private Set<Integer> getUserOrganizations(String username) {
71
+ @SuppressWarnings("unchecked")
72
+ Set<Integer> userOrgs = cache.get("orgs_" + username, Set.class);
73
+ if (userOrgs == null) {
74
+ // Theorically this shouldn't be never null, but just in case...
75
+ EntityManager em = emProvider.get();
76
+ User user = em.find(User.class, username);
77
+ if (user != null) {
78
+ userOrgs = user.getAllOrgsIds();
79
+ // We store user orgs in cache only for one hour
80
+ cache.set("orgs_" + username, userOrgs, 3600);
81
+ }
82
+ }
83
+
84
+ return userOrgs;
6585 }
6686
6787 private int getUserRoles(String username) {
....@@ -79,6 +99,7 @@
7999 }
80100 // We store user roles in cache only for one hour
81101 cache.set("roles_" + username, userRoles, 3600);
102
+ cache.set("orgs_" + username, user.getOrgsIds(), 3600);
82103 }
83104 }
84105 return userRoles == null ? 0 : userRoles.intValue();