From c0ed0edef41dc02d6c71d80e5efa8a056adcb6a8 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Mon, 4 Jan 2010 12:29:50 +0000
Subject: [PATCH] SE-182 INSTANCE_ADMIN_OBSERVER role introduced

SVN: 14131
---
 .../client/web/server/translator/RoleCodeTranslator.java  | 5 ++---
 .../generic/shared/authorization/annotation/RoleSet.java  | 6 ++++--
 .../openbis/generic/shared/basic/dto/RoleSetCode.java     | 2 +-
 .../shared/translator/RoleAssignmentTranslator.java       | 8 +++++++-
 4 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/translator/RoleCodeTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/translator/RoleCodeTranslator.java
index 5c14f20e72f..286004542d1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/translator/RoleCodeTranslator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/translator/RoleCodeTranslator.java
@@ -37,14 +37,13 @@ public final class RoleCodeTranslator
         switch (code)
         {
             case GROUP_ADMIN:
-                return RoleCode.ADMIN;
-            case GROUP_ETL_SERVER:
-                return RoleCode.ETL_SERVER;
             case INSTANCE_ADMIN:
                 return RoleCode.ADMIN;
+            case GROUP_ETL_SERVER:
             case INSTANCE_ETL_SERVER:
                 return RoleCode.ETL_SERVER;
             case OBSERVER:
+            case INSTANCE_ADMIN_OBSERVER:
                 return RoleCode.OBSERVER;
             case POWER_USER:
                 return RoleCode.POWER_USER;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/annotation/RoleSet.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/annotation/RoleSet.java
index 2c25e3cb137..5cb50272a5a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/annotation/RoleSet.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/annotation/RoleSet.java
@@ -35,14 +35,16 @@ public enum RoleSet
     NONE(),
 
     INSTANCE_ADMIN(instanceRole(RoleCode.ADMIN)),
-
+    
     GROUP_ADMIN(INSTANCE_ADMIN, groupRole(RoleCode.ADMIN)),
 
     POWER_USER(GROUP_ADMIN, groupRole(RoleCode.POWER_USER)),
 
     USER(POWER_USER, groupRole(RoleCode.USER)),
 
-    OBSERVER(USER, groupRole(RoleCode.OBSERVER)),
+    INSTANCE_ADMIN_OBSERVER(USER, instanceRole(RoleCode.OBSERVER)),
+    
+    OBSERVER(INSTANCE_ADMIN_OBSERVER, groupRole(RoleCode.OBSERVER)),
 
     ETL_SERVER(INSTANCE_ADMIN, groupRole(RoleCode.ETL_SERVER), instanceRole(RoleCode.ETL_SERVER));
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/RoleSetCode.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/RoleSetCode.java
index b5ff2559b81..c227b17121d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/RoleSetCode.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/RoleSetCode.java
@@ -24,7 +24,7 @@ import com.google.gwt.user.client.rpc.IsSerializable;
 public enum RoleSetCode implements IsSerializable
 {
     OBSERVER(true), USER(true), POWER_USER(true), GROUP_ETL_SERVER(true), GROUP_ADMIN(true),
-    INSTANCE_ETL_SERVER(false), INSTANCE_ADMIN(false);
+    INSTANCE_ETL_SERVER(false), INSTANCE_ADMIN(false), INSTANCE_ADMIN_OBSERVER(false);
 
     private final boolean groupLevel;
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/RoleAssignmentTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/RoleAssignmentTranslator.java
index 8e00d170318..d8e27b0043a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/RoleAssignmentTranslator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/RoleAssignmentTranslator.java
@@ -76,7 +76,13 @@ public final class RoleAssignmentTranslator
                 }
                 break;
             case OBSERVER:
-                code = RoleSetCode.OBSERVER;
+                if (role.getGroup() == null)
+                {
+                    code = RoleSetCode.INSTANCE_ADMIN_OBSERVER;
+                } else
+                {
+                    code = RoleSetCode.OBSERVER;
+                }
                 break;
             case USER:
                 code = RoleSetCode.USER;
-- 
GitLab