From 6ea53905061e2cde5b56b072c0ed0624cab4cb73 Mon Sep 17 00:00:00 2001
From: brinn <brinn>
Date: Sat, 16 Mar 2013 16:13:16 +0000
Subject: [PATCH] Add capability REGISTER_SPACE for registering a new space and
 make the user of the session space admin of the new space except if he is
 already instance admin.

SVN: 28620
---
 .../openbis/generic/server/CommonServer.java     | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
index 02dab0584b0..f5bc1c90958 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
@@ -450,12 +450,21 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt
 
     @Override
     @RolesAllowed(RoleWithHierarchy.INSTANCE_ADMIN)
+    @Capability("REGISTER_SPACE")
     public void registerSpace(String sessionToken, String spaceCode, String descriptionOrNull)
     {
         final Session session = getSession(sessionToken);
-        final ISpaceBO groupBO = businessObjectFactory.createSpaceBO(session);
-        groupBO.define(spaceCode, descriptionOrNull);
-        groupBO.save();
+        final ISpaceBO spaceBO = businessObjectFactory.createSpaceBO(session);
+        spaceBO.define(spaceCode, descriptionOrNull);
+        spaceBO.save();
+        // If the user who registers this space is _not_ instance admin, make him space admin for
+        // the freshly created space.
+        if (new AuthorizationServiceUtils(getDAOFactory(), session.getUserName()).doesUserHaveRole(
+                RoleCode.ADMIN.toString(), null) == false)
+        {
+            registerSpaceRole(sessionToken, RoleCode.ADMIN, new SpaceIdentifier(spaceCode),
+                    Grantee.createPerson(session.getUserName()));
+        }
     }
 
     @Override
@@ -515,7 +524,6 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt
         final IRoleAssignmentTable table = businessObjectFactory.createRoleAssignmentTable(session);
         table.add(newRoleAssignment);
         table.save();
-
     }
 
     @Override
-- 
GitLab