[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