From b78e64a272fac635db7b3301252830488829fefd Mon Sep 17 00:00:00 2001
From: Roberto Sánchez <roberto.sanchez@curisit.net>
Date: Mon, 13 Jan 2014 09:53:52 +0000
Subject: [PATCH] #394 feature - Added user roles in form edition

---
 securis/src/main/java/net/curisit/securis/db/User.java     |   21 +++++++++++++++++----
 securis/src/main/resources/static/js/catalogs.json         |    5 +++++
 securis/src/main/resources/static/js/catalogs.js           |    9 ++++++++-
 securis/src/main/java/net/curisit/securis/dao/UserDao.java |    3 ++-
 4 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/dao/UserDao.java b/securis/src/main/java/net/curisit/securis/dao/UserDao.java
index d7cfd9e..3109302 100644
--- a/securis/src/main/java/net/curisit/securis/dao/UserDao.java
+++ b/securis/src/main/java/net/curisit/securis/dao/UserDao.java
@@ -1,5 +1,6 @@
 package net.curisit.securis.dao;
 
+import java.util.Arrays;
 import java.util.Date;
 
 import javax.inject.Inject;
@@ -29,7 +30,7 @@
 		user.setPassword(Utils.sha256("rob"));
 		user.setLang("en");
 		user.setCreationTimestamp(new Date());
-		user.setRoles(User.Rol.ADMIN | User.Rol.ADVANCE);
+		user.setRoles(Arrays.asList(User.Rol.ADMIN, User.Rol.ADVANCE));
 		user.setLastName("Sánchez");
 		em.persist(user);
 		User u2 = em.find(User.class, username);
diff --git a/securis/src/main/java/net/curisit/securis/db/User.java b/securis/src/main/java/net/curisit/securis/db/User.java
index 4846eb8..1de7b9f 100644
--- a/securis/src/main/java/net/curisit/securis/db/User.java
+++ b/securis/src/main/java/net/curisit/securis/db/User.java
@@ -88,12 +88,23 @@
 		this.password = password;
 	}
 
-	public int getRoles() {
-		return roles;
+	public List<Integer> getRoles() {
+		if (roles == 0)
+			return null;
+		List<Integer> aux = new ArrayList<>();
+		for (int rol : Rol.ALL) {
+			if ((roles & rol) != 0) // Each rol is a number with only 1 bit == 1 in binary representation
+				aux.add(rol);
+		}
+		return aux;
 	}
 
-	public void setRoles(int roles) {
-		this.roles = roles;
+	public void setRoles(List<Integer> roles) {
+		this.roles = 0;
+		if (roles != null)
+			for (Integer rol : roles) {
+				this.roles |= rol;
+			}
 	}
 
 	public String getFirstName() {
@@ -181,6 +192,8 @@
 	static public class Rol {
 		static public final int ADVANCE = 0x01;
 		static public final int ADMIN = 0x02;
+		static public final int[] ALL = new int[]
+			{ ADVANCE, ADMIN };
 	}
 
 }
diff --git a/securis/src/main/resources/static/js/catalogs.js b/securis/src/main/resources/static/js/catalogs.js
index cde7a57..10dc1dd 100644
--- a/securis/src/main/resources/static/js/catalogs.js
+++ b/securis/src/main/resources/static/js/catalogs.js
@@ -140,6 +140,7 @@
 		_current.fields.forEach(function(f) {
 			if (f.resource)
 				refsFields.push(f)
+
 		});
 		
 		var that = this;
@@ -153,6 +154,7 @@
 		console.log('promises: ' + promises.length + ' ')
 		console.log(promises)
 		$q.all(promises).then(function() {
+			
 			for (var k in refs) {
 				var pk = that.getPk(that.getMetadata(that.getField(k).resource))
 				console.log('PK field for ' + k + ' is ' + pk)
@@ -167,8 +169,13 @@
 				console.log('Ready for combo for ' + k)
 				console.log(comboData);
 			}
-			
+			_current.fields.forEach(function(f) {
+				if (f.values)
+					refs[f.name] = f.values;
+			});
 		})
+		
+		console.log(refs);
 		return refs;
 	} 
 	
diff --git a/securis/src/main/resources/static/js/catalogs.json b/securis/src/main/resources/static/js/catalogs.json
index a371fde..96d817a 100644
--- a/securis/src/main/resources/static/js/catalogs.json
+++ b/securis/src/main/resources/static/js/catalogs.json
@@ -152,6 +152,11 @@
 		"resource" : "organization",
 		"type" : "multiselect"
 	}, {
+		"name" : "roles",
+		"display" : "Roles",
+		"values" : [{"id":1, "label":"Advance"}, {"id":2, "label":"Admin"}],
+		"type" : "multiselect"
+	}, {
 		"name" : "lastLogin",
 		"display" : "Last login",
 		"autogenerate" : true,

--
Gitblit v1.3.2