[jboss-svn-commits] JBL Code SVN: r21311 - in labs/jbossrules/trunk/drools-guvnor/src: test/java/org/drools/guvnor/server/security and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jul 31 08:30:46 EDT 2008


Author: jervisliu
Date: 2008-07-31 08:30:46 -0400 (Thu, 31 Jul 2008)
New Revision: 21311

Added:
   labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/security/RoleBasedPermissionStoreTest.java
Modified:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedAuthenticator.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedPermissionStore.java
Log:
Use permission store to retrieve and store role based permission information.

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedAuthenticator.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedAuthenticator.java	2008-07-31 11:16:10 UTC (rev 21310)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedAuthenticator.java	2008-07-31 12:30:46 UTC (rev 21311)
@@ -16,10 +16,10 @@
  */
 
 
-
 import java.util.List;
+import org.apache.log4j.Logger;
 
-import org.apache.log4j.Logger;
+import org.jboss.seam.Component;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.contexts.Contexts;
 import org.jboss.seam.security.Identity;
@@ -32,14 +32,15 @@
 public class RoleBasedAuthenticator {
 
     private static final Logger log = Logger.getLogger(RoleBasedAuthenticator.class);
-
+	
     public boolean authenticate() {
         if (SecurityServiceImpl.GUEST_LOGIN.equals( Identity.instance().getUsername())) {
             return false;
         }
         log.info( "User logged in via RoleBasedAuthenticator.");
-
-       	RoleBasedPermissionStore pbps = new RoleBasedPermissionStore();
+        
+        RoleBasedPermissionStore pbps = (RoleBasedPermissionStore) Component
+		.getInstance("org.drools.guvnor.server.security.RoleBasedPermissionStore");
     	List<RoleBasedPermission> permissions = pbps.getRoleBasedPermissionsByUserName(Identity.instance().getUsername());
 
     	//The admin role is added into Identity so that we can call Identity.hadRole("admin")

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedPermissionStore.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedPermissionStore.java	2008-07-31 11:16:10 UTC (rev 21310)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedPermissionStore.java	2008-07-31 12:30:46 UTC (rev 21311)
@@ -2,18 +2,24 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
+import javax.jcr.RepositoryException;
+
+import org.drools.repository.RulesRepository;
+import org.drools.repository.security.PermissionManager;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.security.Identity;
+
+ at Name("org.drools.guvnor.server.security.RoleBasedPermissionStore")
+ at AutoCreate
 public class RoleBasedPermissionStore {
 	private static List<RoleBasedPermission> rbps = new ArrayList<RoleBasedPermission>();
-	
-	//Mock data	
-	static {
-		rbps.add(new RoleBasedPermission("jervis", RoleTypes.PACKAGE_ADMIN, "631b3d79-5b67-42fb-83da-714624970a6b", null));
-		rbps.add(new RoleBasedPermission("jervis", RoleTypes.PACKAGE_READONLY, "47982482-7912-4881-97ec-e852494383d7", null));		
-		rbps.add(new RoleBasedPermission("jervis", RoleTypes.ANALYST, null, "category1"));		
-		rbps.add(new RoleBasedPermission("jervis", RoleTypes.ANALYST, null, "category2"));		
-	}
-	
+	@In
+	public RulesRepository repository;
+
 	public RoleBasedPermissionStore() {
 	}
 	
@@ -22,15 +28,63 @@
 	}
 	
 	public List<RoleBasedPermission> getRoleBasedPermissionsByUserName(String userName) {
-		return rbps;
+		PermissionManager permissionManager = new PermissionManager(repository);
+        List<RoleBasedPermission> permissions = new ArrayList<RoleBasedPermission>();
+        try {
+			Map<String, List<String>> perms = permissionManager.retrieveUserPermissions(userName);
+	    	for (String roleType : perms.keySet()) {
+				List<String> permissionsPerRole = perms.get(roleType);
+				for(String permissionPerRole: permissionsPerRole) {
+					if(permissionPerRole.startsWith("package=")) {
+						String packageUuid = permissionPerRole.substring("package=".length());
+						permissions.add(new RoleBasedPermission(userName, roleType, packageUuid, null));
+					} else if(permissionPerRole.startsWith("category=")) {
+						String categoryPath = permissionPerRole.substring("category=".length());
+						permissions.add(new RoleBasedPermission(userName, roleType, null, categoryPath));
+					} 
+				}
+			}		    	
+		} catch (RepositoryException e) {
+			e.printStackTrace();
+		}
+		
+		return permissions;
 	}	
 	
 	public List<RoleBasedPermission> getRoleBasedPermissionsByPackage(String packageName) {
 		return null;
 	}
 	
-	public void addRoleBasedPermission(RoleBasedPermission rbp) {
-		rbps.add(rbp);		
+	public void addRoleBasedPermission(String userName, RoleBasedPermission rbp) {
+		PermissionManager permissionManager = new PermissionManager(repository);
+		try {
+
+			Map<String, List<String>> perms = permissionManager
+					.retrieveUserPermissions(userName);
+			Object permissionsPerRole = perms.get(rbp.getRole());
+			if (permissionsPerRole != null) {
+					if (rbp.getPackageUUID() != null) {
+						((List<String>) permissionsPerRole).add("package="
+								+ rbp.getPackageUUID());
+					} else if (rbp.getCategoryPath() != null) {
+						((List<String>) permissionsPerRole).add("category="
+								+ rbp.getPackageUUID());
+					}
+
+			} else {
+				List<String> perm = new ArrayList<String>();
+				if (rbp.getPackageUUID() != null) {
+					perm.add("package=" + rbp.getPackageUUID());
+				} else if (rbp.getCategoryPath() != null) {
+					perm.add("category=" + rbp.getCategoryPath());
+				}
+				perms.put(rbp.getRole(), perm);
+			}
+
+			permissionManager.updateUserPermissions(userName, perms);
+		} catch (RepositoryException e) {
+			e.printStackTrace();
+		}
 	}
 
 

Added: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/security/RoleBasedPermissionStoreTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/security/RoleBasedPermissionStoreTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/security/RoleBasedPermissionStoreTest.java	2008-07-31 12:30:46 UTC (rev 21311)
@@ -0,0 +1,79 @@
+package org.drools.guvnor.server.security;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.guvnor.server.ServiceImplementation;
+import org.drools.guvnor.server.util.TestEnvironmentSessionHelper;
+import org.drools.repository.RulesRepository;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.contexts.Lifecycle;
+import org.jboss.seam.security.Identity;
+
+import junit.framework.TestCase;
+
+public class RoleBasedPermissionStoreTest extends TestCase {
+	public void testGetRoleBasedPermissionsByUserName() throws Exception {
+		RoleBasedPermissionStore store = getStore();
+	
+		store.addRoleBasedPermission("jervis", new RoleBasedPermission("jervis", RoleTypes.PACKAGE_ADMIN, "package1Uuid", null));
+		store.addRoleBasedPermission("jervis", new RoleBasedPermission("jervis", RoleTypes.PACKAGE_READONLY, "package2Uuid", null));
+		store.addRoleBasedPermission("jervis", new RoleBasedPermission("jervis", RoleTypes.PACKAGE_READONLY, "package3Uuid", null));
+		store.addRoleBasedPermission("jervis", new RoleBasedPermission("jervis", RoleTypes.ANALYST, null, "category1"));
+		store.addRoleBasedPermission("john", new RoleBasedPermission("jervis", RoleTypes.ANALYST, null, "category2"));
+		List<RoleBasedPermission> perms = store.getRoleBasedPermissionsByUserName("jervis");
+		assertTrue(perms.size() == 4);
+		
+		List<RoleBasedPermission> expectedPerms = new ArrayList<RoleBasedPermission>();
+		expectedPerms.add(new RoleBasedPermission("jervis", RoleTypes.PACKAGE_ADMIN, "package1Uuid", null));
+		expectedPerms.add(new RoleBasedPermission("jervis", RoleTypes.PACKAGE_READONLY, "package2Uuid", null));
+		expectedPerms.add(new RoleBasedPermission("jervis", RoleTypes.PACKAGE_READONLY, "package3Uuid", null));
+		expectedPerms.add(new RoleBasedPermission("jervis", RoleTypes.ANALYST, null, "category1"));
+		for(RoleBasedPermission perm : perms) {
+			for(RoleBasedPermission expectedPerm : expectedPerms) {
+				if(perm.getPackageUUID() != null && perm.getPackageUUID().equals(expectedPerm.getPackageUUID()) && 
+						perm.getRole().equals(expectedPerm.getRole()))	 {
+					expectedPerms.remove(expectedPerm);
+					break;
+				} else if(perm.getCategoryPath() != null && perm.getCategoryPath().equals(expectedPerm.getCategoryPath())&& 
+						perm.getRole().equals(expectedPerm.getRole()))	 {
+					expectedPerms.remove(expectedPerm);
+					break;
+				}
+			}
+		}
+		assertTrue(expectedPerms.size() == 0);
+		
+		perms = store.getRoleBasedPermissionsByUserName("john");
+		assertTrue(perms.size() == 1);
+	}
+
+	private RoleBasedPermissionStore getStore() throws Exception {
+		RoleBasedPermissionStore store = new RoleBasedPermissionStore();
+
+		store.repository = new RulesRepository(TestEnvironmentSessionHelper
+				.getSession());
+		return store;
+	}
+
+}
\ No newline at end of file




More information about the jboss-svn-commits mailing list