[jboss-svn-commits] JBL Code SVN: r21434 - in labs/jbossrules/trunk/drools-guvnor/src: main/java/org/drools/guvnor/server/util and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Aug 11 11:10:13 EDT 2008


Author: jervisliu
Date: 2008-08-11 11:10:13 -0400 (Mon, 11 Aug 2008)
New Revision: 21434

Modified:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/TableDisplayHandler.java
   labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplSecurityTest.java
Log:
Apply patch on behalf of Chester Wu(chuan wu). https://jira.jboss.org/jira/browse/JBRULES-1707:  Add security filters to queryFullText and queryMetaData in ServiceImplementation.

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2008-08-11 14:49:35 UTC (rev 21433)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2008-08-11 15:10:13 UTC (rev 21434)
@@ -826,8 +826,20 @@
 					"probably have the parameters around the wrong way, sigh...");
 		}
 		AssetItemIterator it = repository.queryFullText(text, seekArchived);
+		
+		// Add filter for READONLY permission
+		List<AssetItem> resultList = new ArrayList<AssetItem>();
+		RepositoryFilter filter = new PackageFilter();
+		
+		while (it.hasNext()) {
+			AssetItem ai = it.next();
+			if (checkPackagePermissionHelper(filter, ai, RoleTypes.PACKAGE_READONLY)) {
+				resultList.add(ai);
+			}
+		}		
+		
 		TableDisplayHandler handler = new TableDisplayHandler("searchresults");
-		return handler.loadRuleListTable(it, skip, numRows);
+		return handler.loadRuleListTable(resultList, skip, numRows);
 	}
 
 	@WebRemote
@@ -860,10 +872,50 @@
 		dates[1] = new DateQuery(AssetItem.LAST_MODIFIED_PROPERTY_NAME,
 				isoDate(modifiedAfter), isoDate(modifiedBefore));
 		AssetItemIterator it = repository.query(q, seekArchived, dates);
+		
+		// Add Filter to check Permission
+		List<AssetItem> resultList = new ArrayList<AssetItem>();
+		
+		RepositoryFilter packageFilter = new PackageFilter();
+		RepositoryFilter categoryFilter = new CategoryFilter();
+		
+		while (it.hasNext()) {
+			AssetItem ai = it.next();
+			if (checkPackagePermissionHelper(packageFilter, ai, RoleTypes.PACKAGE_READONLY) || 
+					checkCategoryPermissionHelper(categoryFilter, ai, RoleTypes.ANALYST)) {
+				resultList.add(ai);
+			}
+		}		
+		
 		TableDisplayHandler handler = new TableDisplayHandler("searchresults");
-		return handler.loadRuleListTable(it, skip, numRows);
+		return handler.loadRuleListTable(resultList, skip, numRows);
 	}
 
+	private boolean checkPackagePermissionHelper(
+			RepositoryFilter filter, AssetItem item, String roleType) {
+		return filter.accept(getConfigDataHelper(item.getPackage().getUUID()), roleType);
+	}
+	
+	private boolean checkCategoryPermissionHelper(
+			RepositoryFilter filter, AssetItem item, String roleType) {
+		List<CategoryItem> tempCateList = item.getCategories();
+		for (Iterator<CategoryItem> i = tempCateList.iterator(); i.hasNext();) {
+			CategoryItem categoryItem = i.next();
+			
+			if (filter.accept(categoryItem.getName(), roleType)) {
+				return true;
+			}
+		}
+		
+		return false;
+	}
+
+	private PackageConfigData getConfigDataHelper(String uuidStr) {
+		PackageConfigData data = new PackageConfigData();
+		data.uuid = uuidStr;
+		return data;
+	}	
+	
 	private String isoDate(Date d) {
 		if (d != null) {
 			Calendar cal = Calendar.getInstance();
@@ -1913,4 +1965,4 @@
 
 
 
-}
\ No newline at end of file
+}

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/TableDisplayHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/TableDisplayHandler.java	2008-08-11 14:49:35 UTC (rev 21433)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/TableDisplayHandler.java	2008-08-11 15:10:13 UTC (rev 21434)
@@ -63,7 +63,52 @@
         result.hasNext = list.hasNext;
         return result;
     }
+    
+    private TableDataResult loadRuleListTable(
+    		List<AssetItem> assetList, long curPos, boolean hasNext) 
+    	throws SerializableException {
+    	List<TableDataRow> data = loadRows(assetList.iterator(), -1);
+    	TableDataResult result = new TableDataResult();
+    	result.data = (TableDataRow[]) data.toArray(new TableDataRow[data.size()]);
+    	result.currentPosition = curPos;
+    	result.hasNext = hasNext;
+    	return result;
+    }
 
+    public TableDataResult loadRuleListTable(
+    		List<AssetItem> assetList, int skip, int numRows) throws SerializableException {
+    	int size = assetList.size();
+    	boolean hasNext = false;
+    	int startPos = 0;
+    	int endPos = 0;
+
+    	if (numRows != -1) {
+        	if (skip > size) {
+        		List<AssetItem> tempList = new ArrayList<AssetItem>();
+            	return loadRuleListTable(tempList, 0, false);
+        	}    	
+
+        	if (skip > 0) {
+        		startPos = skip;
+        	} else {
+        		skip = 0;
+        	}
+        	
+        	if ((skip + numRows) > size) {
+        		endPos = size;
+        	} else {
+        		endPos = skip + numRows;
+        		hasNext = true;
+        	}   		
+        	
+        	List<AssetItem> tempList2 = assetList.subList(startPos, endPos);
+        	
+        	return loadRuleListTable(tempList2, endPos, hasNext);
+    	}
+    	
+    	return loadRuleListTable(assetList, 0, false);
+    }  
+    
     public TableDataResult loadRuleListTable(AssetItemIterator it, int skip, int numRows) {
     	if (numRows != -1) {
     		it.skip(skip);
@@ -75,7 +120,6 @@
         result.hasNext = it.hasNext();
         result.currentPosition = it.getPosition();
         return result;
-
     }
 
 	private List<TableDataRow> loadRows(Iterator<AssetItem> it, int numRows) {
@@ -111,4 +155,4 @@
         config.rowsPerPage = 40;
         return config;
     }
-}
\ No newline at end of file
+}

Modified: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplSecurityTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplSecurityTest.java	2008-08-11 14:49:35 UTC (rev 21433)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplSecurityTest.java	2008-08-11 15:10:13 UTC (rev 21434)
@@ -28,6 +28,12 @@
 import org.jboss.seam.security.permission.PermissionResolver;
 import org.jboss.seam.security.permission.RoleBasedPermissionResolver;
 
+ import org.drools.guvnor.client.common.AssetFormats;
+ import org.drools.guvnor.client.rpc.MetaDataQuery;
+ import org.drools.guvnor.client.rpc.RepositoryService;
+ import org.drools.guvnor.client.rpc.RuleAsset;
+ import org.drools.guvnor.client.rpc.RuleContentText;
+
 import junit.framework.TestCase;
 
 public class ServiceImplSecurityTest extends TestCase {
@@ -59,7 +65,7 @@
 			Lifecycle.beginCall();
 			MockIdentity midentity = new MockIdentity();
 	    	RoleBasedPermissionResolver resolver = new RoleBasedPermissionResolver();
-	    	resolver.setEnableRoleBasedAuthorization(true);	        
+	    	resolver.setEnableRoleBasedAuthorization(true);
 			midentity.addPermissionResolver(resolver);
 
 			Contexts.getSessionContext().set(
@@ -70,7 +76,7 @@
 			List<RoleBasedPermission> pbps = new ArrayList<RoleBasedPermission>();
 			pbps.add(new RoleBasedPermission("jervis", RoleTypes.ANALYST, null,
 					"testLoadRuleAssetWithRoleBasedAuthrozationCat1"));
-	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);    
+	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);
 	    	Contexts.getSessionContext().set("org.drools.guvnor.server.security.RoleBasedPermissionStore", store);
 
 
@@ -114,7 +120,7 @@
 			Lifecycle.beginCall();
 			MockIdentity midentity = new MockIdentity();
 	    	RoleBasedPermissionResolver resolver = new RoleBasedPermissionResolver();
-	    	resolver.setEnableRoleBasedAuthorization(true);	        
+	    	resolver.setEnableRoleBasedAuthorization(true);
 			midentity.addPermissionResolver(resolver);
 
 			Contexts.getSessionContext().set(
@@ -126,10 +132,10 @@
 			pbps.add(new RoleBasedPermission("jervis",
 					RoleTypes.PACKAGE_READONLY,
 					package1Uuid, null));
-	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);    
+	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);
 	    	Contexts.getSessionContext().set("org.drools.guvnor.server.security.RoleBasedPermissionStore", store);
 
-			
+
 			//now lets see if we can access this asset with the permissions
 			RuleAsset asset = impl.loadRuleAsset(uuid1);
 			try {
@@ -169,7 +175,7 @@
 			Lifecycle.beginCall();
 			MockIdentity midentity = new MockIdentity();
 	    	RoleBasedPermissionResolver resolver = new RoleBasedPermissionResolver();
-	    	resolver.setEnableRoleBasedAuthorization(false);	        
+	    	resolver.setEnableRoleBasedAuthorization(false);
 			midentity.addPermissionResolver(resolver);
 
 			Contexts.getSessionContext().set(
@@ -178,7 +184,7 @@
 					"org.drools.guvnor.client.rpc.RepositoryService", impl);
 
 			List<RoleBasedPermission> pbps = new ArrayList<RoleBasedPermission>();
-	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);    
+	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);
 	    	Contexts.getSessionContext().set("org.drools.guvnor.server.security.RoleBasedPermissionStore", store);
 
 			// now lets see if we can access this asset with the permissions
@@ -212,7 +218,7 @@
 			Lifecycle.beginCall();
 			MockIdentity midentity = new MockIdentity();
 	    	RoleBasedPermissionResolver resolver = new RoleBasedPermissionResolver();
-	    	resolver.setEnableRoleBasedAuthorization(true);	        
+	    	resolver.setEnableRoleBasedAuthorization(true);
 			midentity.addPermissionResolver(resolver);
 
 			Contexts.getSessionContext().set(
@@ -224,7 +230,7 @@
 			pbps.add(new RoleBasedPermission("jervis",
 					RoleTypes.PACKAGE_ADMIN,
 					packageUuid, null));
-	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);    
+	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);
 	    	Contexts.getSessionContext().set("org.drools.guvnor.server.security.RoleBasedPermissionStore", store);
 
 			//now lets see if we can access this asset with the permissions
@@ -258,7 +264,7 @@
 			Lifecycle.beginCall();
 			MockIdentity midentity = new MockIdentity();
 	    	RoleBasedPermissionResolver resolver = new RoleBasedPermissionResolver();
-	    	resolver.setEnableRoleBasedAuthorization(true);	        
+	    	resolver.setEnableRoleBasedAuthorization(true);
 			midentity.addPermissionResolver(resolver);
 
 			Contexts.getSessionContext().set(
@@ -270,7 +276,7 @@
 			pbps.add(new RoleBasedPermission("jervis",
 					RoleTypes.ANALYST,
 					null, "category1"));
-	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);    
+	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);
 	    	Contexts.getSessionContext().set("org.drools.guvnor.server.security.RoleBasedPermissionStore", store);
 
 			//now lets see if we can access this asset with the permissions
@@ -308,7 +314,7 @@
 			Lifecycle.beginCall();
 			MockIdentity midentity = new MockIdentity();
 	    	RoleBasedPermissionResolver resolver = new RoleBasedPermissionResolver();
-	    	resolver.setEnableRoleBasedAuthorization(true);	        
+	    	resolver.setEnableRoleBasedAuthorization(true);
 			midentity.addPermissionResolver(resolver);
 
 			Contexts.getSessionContext().set(
@@ -323,7 +329,7 @@
 			pbps.add(new RoleBasedPermission("jervis",
 					RoleTypes.PACKAGE_ADMIN,
 					packageUuid, null));
-	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);    
+	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);
 	    	Contexts.getSessionContext().set("org.drools.guvnor.server.security.RoleBasedPermissionStore", store);
 
 			//now lets see if we can access this asset with the permissions
@@ -413,9 +419,9 @@
 			Lifecycle.beginCall();
 			MockIdentity midentity = new MockIdentity();
 	    	RoleBasedPermissionResolver resolver = new RoleBasedPermissionResolver();
-	    	resolver.setEnableRoleBasedAuthorization(true);	        
+	    	resolver.setEnableRoleBasedAuthorization(true);
 			midentity.addPermissionResolver(resolver);
-			
+
 			Contexts.getSessionContext().set(
 					"org.jboss.seam.security.identity", midentity);
 			Contexts.getSessionContext().set(
@@ -428,7 +434,7 @@
 			pbps.add(new RoleBasedPermission("jervis",
 					RoleTypes.PACKAGE_DEVELOPER,
 					package2Uuid, null));
-	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);    
+	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);
 	    	Contexts.getSessionContext().set("org.drools.guvnor.server.security.RoleBasedPermissionStore", store);
 
 
@@ -482,7 +488,7 @@
 			Lifecycle.beginCall();
 			MockIdentity midentity = new MockIdentity();
 	    	RoleBasedPermissionResolver resolver = new RoleBasedPermissionResolver();
-	    	resolver.setEnableRoleBasedAuthorization(true);	        
+	    	resolver.setEnableRoleBasedAuthorization(true);
 			midentity.addPermissionResolver(resolver);
 
 			Contexts.getSessionContext().set(
@@ -500,7 +506,7 @@
 			pbps.add(new RoleBasedPermission("jervis",
 					RoleTypes.PACKAGE_DEVELOPER,
 					package3Uuid, null));
-	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);    
+	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);
 	    	Contexts.getSessionContext().set("org.drools.guvnor.server.security.RoleBasedPermissionStore", store);
 
 
@@ -512,7 +518,7 @@
 			Lifecycle.endApplication();
 		}
 	}
-	
+
 	public void testCheckinWithPackageReadonly() throws Exception {
 		ServiceImplementation impl = getService();
 		String packageUuid = impl.createPackage(
@@ -536,7 +542,7 @@
 		Lifecycle.beginCall();
 		MockIdentity midentity = new MockIdentity();
     	RoleBasedPermissionResolver resolver = new RoleBasedPermissionResolver();
-    	resolver.setEnableRoleBasedAuthorization(true);	        
+    	resolver.setEnableRoleBasedAuthorization(true);
 		midentity.addPermissionResolver(resolver);
 
 		Contexts.getSessionContext().set(
@@ -547,19 +553,19 @@
 		pbps.add(new RoleBasedPermission("jervis",
 				RoleTypes.PACKAGE_READONLY,
 				packageUuid, null));
-    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);    
+    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);
     	Contexts.getSessionContext().set("org.drools.guvnor.server.security.RoleBasedPermissionStore", store);
-		
+
 		//now lets see if we can access this asset with the permissions
 		try {
 			impl.checkinVersion(asset);
 			fail("Did not catch expected exception");
 		} catch (AuthorizationException e) {
 		}
-		
+
 		Lifecycle.endApplication();
 	}
-	
+
 	public void testCheckinWithPackageDeveloper() throws Exception {
 		ServiceImplementation impl = getService();
 		String packageUuid = impl.createPackage(
@@ -583,7 +589,7 @@
 		Lifecycle.beginCall();
 		MockIdentity midentity = new MockIdentity();
     	RoleBasedPermissionResolver resolver = new RoleBasedPermissionResolver();
-    	resolver.setEnableRoleBasedAuthorization(true);	        
+    	resolver.setEnableRoleBasedAuthorization(true);
 		midentity.addPermissionResolver(resolver);
 
 		Contexts.getSessionContext().set(
@@ -594,16 +600,319 @@
 		pbps.add(new RoleBasedPermission("jervis",
 				RoleTypes.PACKAGE_DEVELOPER,
 				packageUuid, null));
-    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);    
-    	Contexts.getSessionContext().set("org.drools.guvnor.server.security.RoleBasedPermissionStore", store);	
-		
+    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);
+    	Contexts.getSessionContext().set("org.drools.guvnor.server.security.RoleBasedPermissionStore", store);
+
 		//now lets see if we can access this asset with the permissions
 		String uuid2 =  impl.checkinVersion(asset);
 		assertEquals(uuid, uuid2);
-		
+
 		Lifecycle.endApplication();
 	}
-	
+
+ 	public void testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyFilter() throws Exception {
+ 		try {
+ 			ServiceImplementation impl = getService();
+ 			String package3Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyPack3";
+ 			String package3Uuid = impl.createPackage(package3Name, "desc");
+ 			impl.createCategory("",
+ 					"testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyCat3",
+ 					"this is a cat");
+
+ 			String uuid3 = impl.createNewRule("testLoadRuleAssetWithRoleBasedAuthrozation",
+ 					"ReadonlyFilterDescription",
+ 					"testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyCat3",
+ 					package3Name, "drl");
+
+ 			String package4Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyPack4";
+ 			impl.repository.createPackage(package4Name, "desc");
+
+ 			String uuid2 = impl.createNewRule("testLoadRuleAssetWithRoleBasedAuthrozation",
+ 					"ReadonlyFilterDescription",
+ 					"testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyCat3",
+ 					package4Name, "drl");
+
+ 			// Mock up SEAM contexts
+ 			Map application = new HashMap<String, Object>();
+ 			Lifecycle.beginApplication(application);
+ 			Lifecycle.beginCall();
+ 			MockIdentity midentity = new MockIdentity();
+ 	    	RoleBasedPermissionResolver resolver = new RoleBasedPermissionResolver();
+ 	    	resolver.setEnableRoleBasedAuthorization(true);
+ 			midentity.addPermissionResolver(resolver);
+
+ 			Contexts.getSessionContext().set(
+ 					"org.jboss.seam.security.identity", midentity);
+ 			Contexts.getSessionContext().set(
+ 					"org.drools.guvnor.client.rpc.RepositoryService", impl);
+
+ 			List<RoleBasedPermission> pbps = new ArrayList<RoleBasedPermission>();
+ 			pbps.add(new RoleBasedPermission("jervis",
+ 					RoleTypes.PACKAGE_READONLY,
+ 					package3Uuid, null));
+ 	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);
+ 	    	Contexts.getSessionContext().set("org.drools.guvnor.server.security.RoleBasedPermissionStore", store);
+
+ 			TableDataResult result = impl.queryFullText("testLoadRuleAssetWithRoleBasedAuthrozation", true, 0, -1);
+ 			assertEquals(1, result.data.length);
+ 		} finally {
+ 			Lifecycle.endApplication();
+ 		}
+ 	}
+
+ 	public void testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyMetaDataFilter() throws Exception {
+ 		try {
+ 			ServiceImplementation impl = getService();
+
+ 			String rule7Name = "testLoadRuleAssetWithRoleBasedAuthrozationForMetaData7";
+ 			String rule8Name = "testLoadRuleAssetWithRoleBasedAuthrozationForMetaData8";
+
+ 			String package7Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyPack7";
+ 			String category7Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyCat7";
+ 			PackageItem packageItem7 = impl.repository.createPackage(package7Name, "desc");
+ 			String packageItem7UUID = packageItem7.getUUID();
+ 			impl.createCategory("", category7Name, "this is a rabbit");
+
+ 			String uuid7 = impl.createNewRule(rule7Name,
+ 					"MetaDataFilterDescription7", category7Name, package7Name, "drl");
+
+ 			String package8Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyPack8";
+ 			String category8Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyCat8";
+ 			PackageItem packageItem8 = impl.repository.createPackage(package8Name, "desc");
+ 			String packageItem8UUID = packageItem8.getUUID();
+ 			impl.createCategory("", category8Name, "this is a mouse");
+ 			String uuid8 = impl.createNewRule(rule8Name,
+ 					"MetaDataFilterDescription8", category8Name, package8Name, "drl");
+
+ 			// Mock up SEAM contexts
+ 			Map application = new HashMap<String, Object>();
+ 			Lifecycle.beginApplication(application);
+ 			Lifecycle.beginCall();
+ 			MockIdentity midentity = new MockIdentity();
+ 	    	RoleBasedPermissionResolver resolver = new RoleBasedPermissionResolver();
+ 	    	resolver.setEnableRoleBasedAuthorization(true);
+ 			midentity.addPermissionResolver(resolver);
+
+ 			Contexts.getSessionContext().set(
+ 					"org.jboss.seam.security.identity", midentity);
+ 			Contexts.getSessionContext().set(
+ 					"org.drools.guvnor.client.rpc.RepositoryService", impl);
+
+ 			List<RoleBasedPermission> pbps = new ArrayList<RoleBasedPermission>();
+ 			pbps.add(new RoleBasedPermission("jervis",
+ 					RoleTypes.PACKAGE_READONLY,
+ 					packageItem7UUID, null));
+ 			pbps.add(new RoleBasedPermission("jervis",
+ 					RoleTypes.ANALYST,
+ 					null, category7Name));
+ 			pbps.add(new RoleBasedPermission("jervis",
+ 					RoleTypes.ANALYST,
+ 					null, category8Name));
+
+ 	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);
+ 	    	Contexts.getSessionContext().set("org.drools.guvnor.server.security.RoleBasedPermissionStore", store);
+
+ 			MetaDataQuery[] qr = new MetaDataQuery[1];
+ 			qr[0] = new MetaDataQuery();
+ 			qr[0].attribute = AssetItem.DESCRIPTION_PROPERTY_NAME;
+ 			qr[0].valueList = "MetaDataFilterDescription%";
+ 			TableDataResult result = impl.queryMetaData(qr, null, null, null, null, false, 0, -1);
+ 			assertEquals(2, result.data.length);
+ 		} finally {
+ 			Lifecycle.endApplication();
+ 		}
+ 	}
+
+ 	public void testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyMetaDataFilter2() throws Exception {
+ 		try {
+ 			ServiceImplementation impl = getService();
+
+ 			String rule5Name = "testLoadRuleAssetWithRoleBasedAuthrozationForMetaData5";
+ 			String rule6Name = "testLoadRuleAssetWithRoleBasedAuthrozationForMetaData6";
+
+ 			String package5Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyPack5";
+ 			String category5Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyCat5";
+ 			PackageItem packageItem5 = impl.repository.createPackage(package5Name, "desc");
+ 			String packageItem5UUID = packageItem5.getUUID();
+ 			impl.createCategory("", category5Name, "this is a cat");
+ 			String uuid7 = impl.createNewRule(rule5Name,
+ 					"MetaDataFilter2Description5", category5Name, package5Name, "drl");
+
+ 			String package6Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyPack6";
+ 			String category6Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyCat6";
+ 			PackageItem packageItem6 = impl.repository.createPackage(package6Name, "desc");
+ 			String packageItem6UUID = packageItem6.getUUID();
+ 			impl.createCategory("", category6Name, "this is a dog");
+ 			String uuid6 = impl.createNewRule(rule6Name,
+ 					"MetaDataFilter2Description6", category6Name, package6Name, "drl");
+
+ 			// Mock up SEAM contexts
+ 			Map application = new HashMap<String, Object>();
+ 			Lifecycle.beginApplication(application);
+ 			Lifecycle.beginCall();
+ 			MockIdentity midentity = new MockIdentity();
+ 	    	RoleBasedPermissionResolver resolver = new RoleBasedPermissionResolver();
+ 	    	resolver.setEnableRoleBasedAuthorization(true);
+ 			midentity.addPermissionResolver(resolver);
+
+ 			Contexts.getSessionContext().set(
+ 					"org.jboss.seam.security.identity", midentity);
+ 			Contexts.getSessionContext().set(
+ 					"org.drools.guvnor.client.rpc.RepositoryService", impl);
+
+ 			List<RoleBasedPermission> pbps = new ArrayList<RoleBasedPermission>();
+ 			pbps.add(new RoleBasedPermission("jervis",
+ 					RoleTypes.PACKAGE_READONLY,
+ 					packageItem5UUID, null));
+ 			pbps.add(new RoleBasedPermission("jervis",
+ 					RoleTypes.PACKAGE_READONLY,
+ 					packageItem6UUID, null));
+
+ 	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);
+ 	    	Contexts.getSessionContext().set("org.drools.guvnor.server.security.RoleBasedPermissionStore", store);
+
+ 			MetaDataQuery[] qr = new MetaDataQuery[1];
+ 			qr[0] = new MetaDataQuery();
+ 			qr[0].attribute = AssetItem.DESCRIPTION_PROPERTY_NAME;
+ 			qr[0].valueList = "MetaDataFilter2Description%";
+ 			TableDataResult result = impl.queryMetaData(qr, null, null, null, null, false, 0, -1);
+ 			assertEquals(2, result.data.length);
+ 		} finally {
+ 			Lifecycle.endApplication();
+ 		}
+ 	}
+
+ 	public void testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyMetaDataFilter3() throws Exception {
+ 		try {
+ 			ServiceImplementation impl = getService();
+
+ 			String rule9Name = "testLoadRuleAssetWithRoleBasedAuthrozationForMetaData9";
+ 			String rule10Name = "testLoadRuleAssetWithRoleBasedAuthrozationForMetaData10";
+
+ 			String package9Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyPack9";
+ 			String category9Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyCat9";
+ 			PackageItem packageItem9 = impl.repository.createPackage(package9Name, "desc");
+ 			String packageItem9UUID = packageItem9.getUUID();
+ 			impl.createCategory("", category9Name, "this is a pigeon");
+ 			String uuid9 = impl.createNewRule(rule9Name,
+ 					"MetaDataFilter3Description9", category9Name, package9Name, "drl");
+
+ 			String package10Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyPack10";
+ 			String category10Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyCat10";
+ 			PackageItem packageItem10 = impl.repository.createPackage(package10Name, "desc");
+ 			String packageItem10UUID = packageItem10.getUUID();
+ 			impl.createCategory("", category10Name, "this is a sparrow");
+ 			String uuid10 = impl.createNewRule(rule10Name,
+ 					"MetaDataFilter3Description10", category10Name, package10Name, "drl");
+
+ 			// Mock up SEAM contexts
+ 			Map application = new HashMap<String, Object>();
+ 			Lifecycle.beginApplication(application);
+ 			Lifecycle.beginCall();
+ 			MockIdentity midentity = new MockIdentity();
+ 	    	RoleBasedPermissionResolver resolver = new RoleBasedPermissionResolver();
+ 	    	resolver.setEnableRoleBasedAuthorization(true);
+ 			midentity.addPermissionResolver(resolver);
+
+ 			Contexts.getSessionContext().set(
+ 					"org.jboss.seam.security.identity", midentity);
+ 			Contexts.getSessionContext().set(
+ 					"org.drools.guvnor.client.rpc.RepositoryService", impl);
+
+ 			List<RoleBasedPermission> pbps = new ArrayList<RoleBasedPermission>();
+ 			pbps.add(new RoleBasedPermission("jervis",
+ 					RoleTypes.ANALYST,
+ 					null, category9Name));
+ 			pbps.add(new RoleBasedPermission("jervis",
+ 					RoleTypes.ANALYST,
+ 					null, category10Name));
+
+ 	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);
+ 	    	Contexts.getSessionContext().set("org.drools.guvnor.server.security.RoleBasedPermissionStore", store);
+
+ 			MetaDataQuery[] qr = new MetaDataQuery[1];
+ 			qr[0] = new MetaDataQuery();
+ 			qr[0].attribute = AssetItem.DESCRIPTION_PROPERTY_NAME;
+ 			qr[0].valueList = "MetaDataFilter3Description%";
+ 			TableDataResult result = impl.queryMetaData(qr, null, null, null, null, false, 0, -1);
+ 			assertEquals(2, result.data.length);
+ 		} finally {
+ 			Lifecycle.endApplication();
+ 		}
+ 	}
+
+ 	public void testTableDisplayHandler() throws Exception {
+ 		try {
+ 			ServiceImplementation impl = getService();
+
+ 			String rule11Name = "testLoadRuleAssetWithRoleBasedAuthrozationForMetaData11";
+ 			String rule12Name = "testLoadRuleAssetWithRoleBasedAuthrozationForMetaData12";
+
+ 			String package11Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyPack11";
+ 			String category11Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyCat11";
+ 			PackageItem packageItem11 = impl.repository.createPackage(package11Name, "desc");
+ 			String packageItem11UUID = packageItem11.getUUID();
+ 			impl.createCategory("", category11Name, "this is a dock");
+ 			String uuid11 = impl.createNewRule(rule11Name,
+ 					"DisplayHandlerDescription11", category11Name, package11Name, "drl");
+
+ 			String package12Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyPack12";
+ 			String category12Name = "testLoadRuleAssetWithRoleBasedAuthrozationPackageReadonlyCat12";
+ 			PackageItem packageItem12 = impl.repository.createPackage(package12Name, "desc");
+ 			String packageItem12UUID = packageItem12.getUUID();
+ 			impl.createCategory("", category12Name, "this is a sparrow");
+ 			String uuid12 = impl.createNewRule(rule12Name,
+ 					"DisplayHandlerDescription12", category12Name, package12Name, "drl");
+
+ 			// Mock up SEAM contexts
+ 			Map application = new HashMap<String, Object>();
+ 			Lifecycle.beginApplication(application);
+ 			Lifecycle.beginCall();
+ 			MockIdentity midentity = new MockIdentity();
+ 	    	RoleBasedPermissionResolver resolver = new RoleBasedPermissionResolver();
+ 	    	resolver.setEnableRoleBasedAuthorization(true);
+ 			midentity.addPermissionResolver(resolver);
+
+ 			Contexts.getSessionContext().set(
+ 					"org.jboss.seam.security.identity", midentity);
+ 			Contexts.getSessionContext().set(
+ 					"org.drools.guvnor.client.rpc.RepositoryService", impl);
+
+ 			List<RoleBasedPermission> pbps = new ArrayList<RoleBasedPermission>();
+ 			pbps.add(new RoleBasedPermission("jervis",
+ 					RoleTypes.ANALYST,
+ 					null, category11Name));
+ 			pbps.add(new RoleBasedPermission("jervis",
+ 					RoleTypes.ANALYST,
+ 					null, category12Name));
+
+ 	    	MockRoleBasedPermissionStore store = new MockRoleBasedPermissionStore(pbps);
+ 	    	Contexts.getSessionContext().set("org.drools.guvnor.server.security.RoleBasedPermissionStore", store);
+
+ 			MetaDataQuery[] qr = new MetaDataQuery[1];
+ 			qr[0] = new MetaDataQuery();
+ 			qr[0].attribute = AssetItem.DESCRIPTION_PROPERTY_NAME;
+ 			qr[0].valueList = "DisplayHandlerDescription%";
+
+ 			TableDataResult result = impl.queryMetaData(qr, null, null, null, null, false, 1, 1);
+ 			assertEquals(1, result.data.length);
+
+ 			result = impl.queryMetaData(qr, null, null, null, null, false, 0, 1);
+ 			assertEquals(1, result.data.length);
+
+ 			result = impl.queryMetaData(qr, null, null, null, null, false, 0, 4);
+ 			assertEquals(2, result.data.length);
+
+ 			result = impl.queryMetaData(qr, null, null, null, null, false, -1, 4);
+ 			assertEquals(2, result.data.length);
+
+ 			result = impl.queryMetaData(qr, null, null, null, null, false, 6, 4);
+ 			assertEquals(0, result.data.length);
+ 		} finally {
+ 			Lifecycle.endApplication();
+ 		}
+ 	}
+
 	private ServiceImplementation getService() throws Exception {
 		ServiceImplementation impl = new ServiceImplementation();
 




More information about the jboss-svn-commits mailing list