From 602c4c4501dcd89cbce1d6ba61ba6bc75761d643 Mon Sep 17 00:00:00 2001
From: Roberto Sánchez <roberto.sanchez@curisit.net>
Date: Sat, 18 Jan 2014 11:23:45 +0000
Subject: [PATCH] #396 feature - Getting all orgs from user including the children ones

---
 securis/src/main/java/net/curisit/securis/services/SecurityInterceptor.java |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/services/SecurityInterceptor.java b/securis/src/main/java/net/curisit/securis/services/SecurityInterceptor.java
index ca84402..08c4e2e 100644
--- a/securis/src/main/java/net/curisit/securis/services/SecurityInterceptor.java
+++ b/securis/src/main/java/net/curisit/securis/services/SecurityInterceptor.java
@@ -3,6 +3,7 @@
 import java.io.IOException;
 import java.lang.reflect.Method;
 import java.util.List;
+import java.util.Set;
 
 import javax.inject.Inject;
 import javax.persistence.EntityManager;
@@ -60,8 +61,27 @@
 					log.info("User {} has no necessary role to access url: {}", username, servletRequest.getPathInfo());
 					containerRequestContext.abortWith(Response.status(Status.UNAUTHORIZED).build());
 				}
+				Set<Integer> orgs = getUserOrganizations(username);
+				servletRequest.setAttribute("user_orgs", orgs);
 			}
 		}
+	}
+
+	private Set<Integer> getUserOrganizations(String username) {
+		@SuppressWarnings("unchecked")
+		Set<Integer> userOrgs = cache.get("orgs_" + username, Set.class);
+		if (userOrgs == null) {
+			// Theorically this shouldn't be never null, but just in case...
+			EntityManager em = emProvider.get();
+			User user = em.find(User.class, username);
+			if (user != null) {
+				userOrgs = user.getAllOrgsIds();
+				// We store user orgs in cache only for one hour
+				cache.set("orgs_" + username, userOrgs, 3600);
+			}
+		}
+
+		return userOrgs;
 	}
 
 	private int getUserRoles(String username) {
@@ -79,6 +99,7 @@
 				}
 				// We store user roles in cache only for one hour
 				cache.set("roles_" + username, userRoles, 3600);
+				cache.set("orgs_" + username, user.getOrgsIds(), 3600);
 			}
 		}
 		return userRoles == null ? 0 : userRoles.intValue();

--
Gitblit v1.3.2