]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-3150: Spring OID now has a mapping entry in our (CSpace) permission administra...
authorRichard Millet <richard.millet@berkeley.edu>
Wed, 3 Nov 2010 21:44:33 +0000 (21:44 +0000)
committerRichard Millet <richard.millet@berkeley.edu>
Wed, 3 Nov 2010 21:44:33 +0000 (21:44 +0000)
services/authorization-mgt/import/src/main/java/org/collectionspace/services/authorization/importer/AuthorizationGen.java
services/authorization-mgt/import/src/main/java/org/collectionspace/services/authorization/importer/AuthorizationSeed.java
services/authorization-mgt/service/build.xml
services/authorization-mgt/service/src/main/java/org/collectionspace/services/authorization/storage/PermissionDocumentHandler.java
services/authorization/jaxb/src/main/resources/permissions.xsd
services/authorization/pstore/src/main/resources/db/mysql/authorization.sql
services/authorization/service/src/main/java/org/collectionspace/services/authorization/CSpaceResource.java
services/authorization/service/src/main/java/org/collectionspace/services/authorization/CSpaceResourceImpl.java
services/authorization/service/src/main/java/org/collectionspace/services/authorization/PermissionActionUtil.java [new file with mode: 0644]
services/authorization/service/src/main/java/org/collectionspace/services/authorization/URIResourceImpl.java
services/authorization/service/src/main/java/org/collectionspace/services/authorization/spring/SpringAuthorizationProvider.java

index bf4a385c1158ddeb462559998ebe89932be26443..c10f290f3f52321d7caf4dc6f494ed506f02d15a 100644 (file)
@@ -37,6 +37,7 @@ import org.collectionspace.services.authorization.ActionType;
 import org.collectionspace.services.authorization.Permission;
 import org.collectionspace.services.authorization.EffectType;
 import org.collectionspace.services.authorization.PermissionAction;
+import org.collectionspace.services.authorization.PermissionActionUtil;
 import org.collectionspace.services.authorization.PermissionRole;
 import org.collectionspace.services.authorization.PermissionValue;
 import org.collectionspace.services.authorization.PermissionsList;
@@ -154,21 +155,20 @@ public class AuthorizationGen {
         ArrayList<PermissionAction> pas = new ArrayList<PermissionAction>();
         perm.setActions(pas);
 
-        PermissionAction pa = new PermissionAction();
-        pa.setName(ActionType.CREATE);
-        pas.add(pa);
-        PermissionAction pa1 = new PermissionAction();
-        pa1.setName(ActionType.READ);
-        pas.add(pa1);
-        PermissionAction pa2 = new PermissionAction();
-        pa2.setName(ActionType.UPDATE);
-        pas.add(pa2);
-        PermissionAction pa3 = new PermissionAction();
-        pa3.setName(ActionType.DELETE);
-        pas.add(pa3);
-        PermissionAction pa4 = new PermissionAction();
-        pa4.setName(ActionType.SEARCH);
-        pas.add(pa4);
+        PermissionAction permAction = PermissionActionUtil.create(perm, ActionType.CREATE);
+        pas.add(permAction);
+        
+        permAction = PermissionActionUtil.create(perm, ActionType.READ);
+        pas.add(permAction);
+        
+        permAction = PermissionActionUtil.create(perm, ActionType.UPDATE);
+        pas.add(permAction);
+        
+        permAction = PermissionActionUtil.create(perm, ActionType.DELETE);
+        pas.add(permAction);
+        
+        permAction = PermissionActionUtil.create(perm, ActionType.SEARCH);
+        pas.add(permAction);
         
         return perm;
     }
@@ -220,13 +220,12 @@ public class AuthorizationGen {
         ArrayList<PermissionAction> pas = new ArrayList<PermissionAction>();
         perm.setActions(pas);
 
-        PermissionAction pa1 = new PermissionAction();
-        pa1.setName(ActionType.READ);
-        pas.add(pa1);
+        PermissionAction permAction = PermissionActionUtil.create(perm, ActionType.READ);
+        pas.add(permAction);
+
+        permAction = PermissionActionUtil.create(perm, ActionType.SEARCH);
+        pas.add(permAction);
 
-        PermissionAction pa4 = new PermissionAction();
-        pa4.setName(ActionType.SEARCH);
-        pas.add(pa4);
         return perm;
     }
 
@@ -257,7 +256,6 @@ public class AuthorizationGen {
 
             Role rrole = buildTenantReaderRole(tenantId);
             readerRoles.add(rrole);
-
         }
     }
 
index 895b1162b0149acd5f6ff1186bc83b33b836b476..fee4fa997d8f11b443b3984f36525f99a3f204c5 100644 (file)
@@ -116,7 +116,7 @@ public class AuthorizationSeed {
         }
         List<PermissionAction> permActions = perm.getActions();
         for (PermissionAction permAction : permActions) {
-            CSpaceAction action = getAction(permAction.getName());
+            CSpaceAction action = URIResourceImpl.getAction(permAction.getName());
             URIResourceImpl uriRes = new URIResourceImpl(perm.getTenantId(),
                     perm.getResourceName(), action);
             boolean grant = perm.getEffect().equals(EffectType.PERMIT) ? true : false;
@@ -129,7 +129,7 @@ public class AuthorizationSeed {
      * given ActionType
      * @param action
      * @return
-     */
+     *
     private CSpaceAction getAction(ActionType action) {
         if (ActionType.CREATE.equals(action)) {
             return CSpaceAction.CREATE;
@@ -150,6 +150,7 @@ public class AuthorizationSeed {
         }
         throw new IllegalArgumentException("action = " + action.toString());
     }
+    */
 
     static Object fromFile(Class jaxbClass, String fileName) throws Exception {
         InputStream is = new FileInputStream(fileName);
index 11b3ee137b450c16d5688bf2f21432c451322cd6..5584b08feaf7e8593ea87654763411ddd2ae3e0c 100644 (file)
@@ -10,7 +10,7 @@
     <property file="${services.trunk}/build.properties" />\r
     <property name="mvn.opts" value="" />\r
     <property name="src" location="src"/>\r
-    <property name="authorization.jar" value="cspace-services-authz.jar"/>\r
+    <property name="authorization.jar" value="collectionspace-services-authz-mgt.jar"/>\r
     <condition property="osfamily-unix">\r
         <os family="unix" />\r
     </condition>\r
         </exec>\r
     </target>\r
 \r
+<!--\r
     <target name="deploy" depends="install"\r
             description="deploy authorization service in ${jboss.server.cspace}">\r
         <copy file="${basedir}/target/${authorization.jar}" todir="${jboss.server.cspace}/lib"/>\r
         <delete file="${jboss.server.cspace}/lib/${authorization.jar}"/>\r
         <echo message="Check out authorization Service Configuration Guide on wiki.collectionspace.org for more details"/>\r
     </target>\r
+-->    \r
 \r
     <target name="dist"\r
             description="generate distribution for authorization service" depends="package">\r
index 94d9e03a616e41901f3a8f1434fb3734d14394fe..29503a36a2ed5d284b7c6356f418a8893b1407ea 100644 (file)
@@ -29,10 +29,16 @@ import java.util.UUID;
 
 import org.collectionspace.services.authorization.AccountRole;
 import org.collectionspace.services.authorization.AccountRoleRel;
+import org.collectionspace.services.authorization.ActionType;
+import org.collectionspace.services.authorization.AuthZ;
+import org.collectionspace.services.authorization.CSpaceAction;
+import org.collectionspace.services.authorization.EffectType;
 import org.collectionspace.services.authorization.Permission;
 import org.collectionspace.services.authorization.PermissionAction;
+import org.collectionspace.services.authorization.PermissionActionUtil;
 import org.collectionspace.services.authorization.PermissionsList;
 import org.collectionspace.services.authorization.PermissionsRolesList;
+import org.collectionspace.services.authorization.URIResourceImpl;
 
 import org.collectionspace.services.common.document.AbstractDocumentHandlerImpl;
 import org.collectionspace.services.common.document.BadRequestException;
@@ -54,6 +60,54 @@ public class PermissionDocumentHandler
     private final Logger logger = LoggerFactory.getLogger(PermissionDocumentHandler.class);
     private Permission permission;
     private PermissionsList permissionsList;
+    
+    public CSpaceAction getAction(ActionType action) {
+       System.out.println("Hello, world? " + action.name());
+       System.out.println("Hello, world? " + ActionType.CREATE.name());
+       
+       try {
+        if (ActionType.CREATE.name().equals(action.name())) {
+            return CSpaceAction.CREATE;
+        } else if (ActionType.READ.equals(action)) {
+            return CSpaceAction.READ;
+        } else if (ActionType.UPDATE.equals(action)) {
+            return CSpaceAction.UPDATE;
+        } else if (ActionType.DELETE.equals(action)) {
+            return CSpaceAction.DELETE;
+        } else if (ActionType.SEARCH.equals(action)) {
+            return CSpaceAction.SEARCH;
+        } else if (ActionType.ADMIN.equals(action)) {
+            return CSpaceAction.ADMIN;
+        } else if (ActionType.START.equals(action)) {
+            return CSpaceAction.START;
+        } else if (ActionType.STOP.equals(action)) {
+            return CSpaceAction.STOP;
+        }
+       } catch (Exception x) {
+               x.printStackTrace();
+       }
+        throw new IllegalArgumentException("action = " + action.toString());
+    }
+    
+    /*
+     * Add the ACE hashed ID to the permission action so we can map the permission to the Spring Security
+     * tables.
+     */
+    private void handlePermissionActions(Permission perm) {
+       //FIXME: REM - Having Java class loader issues with ActionType class.  Not sure of the cause.
+       try {
+               List<PermissionAction> permActions = perm.getActions();
+               for (PermissionAction permAction : permActions) {
+                   CSpaceAction action = getAction(permAction.getName());
+                   URIResourceImpl uriRes = new URIResourceImpl(perm.getTenantId(),
+                           perm.getResourceName(), action);
+                   permAction.setObjectIdentity(uriRes.getHashedId().toString());
+                   //PermissionActionUtil.update(perm, permAction);
+               }
+       } catch (Exception x) {
+               x.printStackTrace();
+       }
+    }
 
     @Override
     public void handleCreate(DocumentWrapper<Permission> wrapDoc) throws Exception {
@@ -61,6 +115,7 @@ public class PermissionDocumentHandler
         Permission permission = wrapDoc.getWrappedObject();
         permission.setCsid(id);
         setTenant(permission);
+        handlePermissionActions(permission);
     }
 
     @Override
@@ -105,6 +160,7 @@ public class PermissionDocumentHandler
             logger.debug("merged permission=" + JaxbUtils.toString(to, Permission.class));
         }
 
+        handlePermissionActions(to);
         return to;
     }
 
index 0107371e4286cf4732ff123a0fbd8b17fa808b3b..097cea7c5c648a58360c9ba0c9a10ae5ec566966 100644 (file)
                     </xs:appinfo>
                 </xs:annotation>
             </xs:element>
+            <xs:element name="objectIdentity" type="xs:string" minOccurs="1">
+                <xs:annotation>
+                    <xs:appinfo>
+                        <hj:basic>
+                            <orm:column name="objectIdentity" length="128" nullable="false"/>
+                        </hj:basic>
+                    </xs:appinfo>
+                </xs:annotation>
+            </xs:element>
         </xs:sequence>
     </xs:complexType>
 
index 2683107b13cf942278543dabd36f5dcf39b7fc0e..e878814daa0276bf7dc2a3e62d008a2c013ae9a0 100644 (file)
@@ -6,7 +6,7 @@ drop table if exists permissions_roles;
 drop table if exists roles;
 create table accounts_roles (HJID bigint not null auto_increment, account_id varchar(128) not null, created_at datetime not null, role_id varchar(128) not null, role_name varchar(255), screen_name varchar(255), user_id varchar(128) not null, primary key (HJID), unique (account_id, role_id));
 create table permissions (csid varchar(128) not null, action_group varchar(128), attribute_name varchar(128), created_at datetime not null, description varchar(255), effect varchar(32) not null, resource_name varchar(128) not null, tenant_id varchar(128) not null, updated_at datetime, primary key (csid));
-create table permissions_actions (HJID bigint not null auto_increment, name varchar(128) not null, ACTIONS_PERMISSION_CSID varchar(128), primary key (HJID));
+create table permissions_actions (HJID bigint not null auto_increment, name varchar(128) not null, objectIdentity varchar(128) not null, ACTIONS_PERMISSION_CSID varchar(128), primary key (HJID));
 create table permissions_roles (HJID bigint not null auto_increment, actionGroup varchar(255), created_at datetime not null, permission_id varchar(128) not null, permission_resource varchar(255), role_id varchar(128) not null, role_name varchar(255), primary key (HJID), unique (permission_id, role_id));
 create table roles (csid varchar(128) not null, created_at datetime not null, description varchar(255), rolegroup varchar(255), rolename varchar(200) not null, tenant_id varchar(128) not null, updated_at datetime, primary key (csid), unique (rolename, tenant_id));
 alter table permissions_actions add index FK85F82042E2DC84FD (ACTIONS_PERMISSION_CSID), add constraint FK85F82042E2DC84FD foreign key (ACTIONS_PERMISSION_CSID) references permissions (csid);
index f9599afd7d46f1fffccbf187eab8b14efbe78c62..34ad61f2833ead8f95ca2993e6db4eb65bcf1656 100644 (file)
@@ -44,6 +44,13 @@ public interface CSpaceResource {
      * @return
      */
     public String getId();
+    
+    /**
+     * Gets the hashed id.
+     *
+     * @return the hashed id
+     */
+    public Long getHashedId();
 
     /**
      * getType get type of the resource
index ac1780fcee2d71c9f598513a3d0161a657616edc..f03505800dfea6e648ec1858e004ceb565516211 100644 (file)
@@ -87,6 +87,11 @@ public abstract class CSpaceResourceImpl implements CSpaceResource {
         //tenant-qualified id
         return tenantId + SEPARATOR_COLON + id;
     }
+    
+    @Override
+    public Long getHashedId() {
+       return Long.valueOf(getId().hashCode());
+    }
 
     @Override
     public TYPE getType() {
diff --git a/services/authorization/service/src/main/java/org/collectionspace/services/authorization/PermissionActionUtil.java b/services/authorization/service/src/main/java/org/collectionspace/services/authorization/PermissionActionUtil.java
new file mode 100644 (file)
index 0000000..565a375
--- /dev/null
@@ -0,0 +1,32 @@
+package org.collectionspace.services.authorization;\r
+\r
+import org.collectionspace.services.authorization.PermissionAction;\r
+import org.collectionspace.services.authorization.ActionType;\r
+import org.collectionspace.services.authorization.Permission;\r
+\r
+public class PermissionActionUtil {\r
+\r
+       static public PermissionAction create(Permission perm,\r
+                       ActionType actionType) {\r
+        PermissionAction pa = new PermissionAction();\r
+\r
+           CSpaceAction action = URIResourceImpl.getAction(actionType);\r
+           URIResourceImpl uriRes = new URIResourceImpl(perm.getTenantId(),\r
+                   perm.getResourceName(), action);\r
+           pa.setName(actionType);\r
+           pa.setObjectIdentity(uriRes.getHashedId().toString());\r
+           \r
+           return pa;\r
+       }\r
+\r
+       static public PermissionAction update(Permission perm, PermissionAction permAction) {\r
+        PermissionAction pa = new PermissionAction();\r
+\r
+           CSpaceAction action = URIResourceImpl.getAction(permAction.getName());\r
+           URIResourceImpl uriRes = new URIResourceImpl(perm.getTenantId(),\r
+                   perm.getResourceName(), action);\r
+           pa.setObjectIdentity(uriRes.getHashedId().toString());\r
+           \r
+           return pa;\r
+       }\r
+}\r
index c1cb1496b677900ce633d9c4cbabe6da95a30d8a..5996bb7553f80727cee4aa14cebad568f99bf814 100644 (file)
@@ -121,6 +121,37 @@ public class URIResourceImpl extends CSpaceResourceImpl {
         return uri;
     }
 
+    /*
+     * Map a Permission ActionType to a CSpaceAction
+     */
+    public static CSpaceAction getAction(ActionType action) {
+       System.out.println("Hello, world? " + action.name());
+       System.out.println("Hello, world? " + ActionType.CREATE.name());
+       
+       try {
+        if (ActionType.CREATE.name().equals(action.name())) {
+            return CSpaceAction.CREATE;
+        } else if (ActionType.READ.equals(action)) {
+            return CSpaceAction.READ;
+        } else if (ActionType.UPDATE.equals(action)) {
+            return CSpaceAction.UPDATE;
+        } else if (ActionType.DELETE.equals(action)) {
+            return CSpaceAction.DELETE;
+        } else if (ActionType.SEARCH.equals(action)) {
+            return CSpaceAction.SEARCH;
+        } else if (ActionType.ADMIN.equals(action)) {
+            return CSpaceAction.ADMIN;
+        } else if (ActionType.START.equals(action)) {
+            return CSpaceAction.START;
+        } else if (ActionType.STOP.equals(action)) {
+            return CSpaceAction.STOP;
+        }
+       } catch (Exception x) {
+               x.printStackTrace();
+       }
+        throw new IllegalArgumentException("action = " + action.toString());
+    }
+    
     /**
      * getAction is a conveneniece method to get action
      * for given HTTP method invoked on the resource
index 20c73ce37e55f0e6f976aa88b80a7431c3a25985..f0dd05a0029960becf9a6ef787614574b8910b60 100644 (file)
@@ -113,7 +113,8 @@ public class SpringAuthorizationProvider implements CSpaceAuthorizationProvider
     }
 
     static Long getObjectIdentityIdentifier(CSpaceResource res) {
-        return Long.valueOf(res.getId().hashCode());
+       return res.getHashedId();
+        //return Long.valueOf(res.getId().hashCode());
     }
 
     static String getObjectIdentityType(CSpaceResource res) {