AIRAVATA-3086 Use group membership instead of roles
diff --git a/app/controllers/AccountController.php b/app/controllers/AccountController.php
index 9216c5b..5d020a8 100644
--- a/app/controllers/AccountController.php
+++ b/app/controllers/AccountController.php
@@ -153,22 +153,35 @@
             Session::put('oauth-expiration-time',$expirationTime);
 
             Session::put("roles", $userRoles);
-            if (in_array(Config::get('pga_config.wsis')['admin-role-name'], $userRoles)) {
+            // AIRAVATA-3086: get gateway groups and get the groups this user is a member of
+            $gatewayGroups = Airavata::getGatewayGroups($authzToken);
+            $groupMemberships = GroupManagerService::getAllGroupsUserBelongs(
+                $authzToken, $username . "@" . Config::get('pga_config.airavata')['gateway-id']);
+            $get_group_id = function($group) {
+                return $group->id;
+            };
+            $userGroupIds = array_map($get_group_id, $groupMemberships);
+            // AIRAVATA-3086: check if user is in Admins group
+            if (in_array($gatewayGroups->adminsGroupId, $userGroupIds)) {
                 Session::put("admin", true);
             }
-            if (in_array(Config::get('pga_config.wsis')['read-only-admin-role-name'], $userRoles)) {
+            // AIRAVATA-3086: check if user is in Read Only Admins group
+            if (in_array($gatewayGroups->readOnlyAdminsGroupId, $userGroupIds)) {
                 Session::put("authorized-user", true);
                 Session::put("admin-read-only", true);
             }
-            if (in_array(Config::get('pga_config.wsis')['user-role-name'], $userRoles)) {
+            // AIRAVATA-3086: check if user is in default Gateway Users group
+            if (in_array($gatewayGroups->defaultGatewayUsersGroupId, $userGroupIds)) {
                 Session::put("authorized-user", true);
             }
+            // AIRAVATA-3086: leave this for scigap/super-admin portal
             //gateway-provider-code
             if (in_array("gateway-provider", $userRoles)) {
                 Session::put("gateway-provider", true);
             }
+            // AIRAVATA-3086: for scigap/super-admin portal, keep same role-based rules
             //only for super admin
-            if(  Config::get('pga_config.portal')['super-admin-portal'] == true && Session::has("admin")){
+            if(  Config::get('pga_config.portal')['super-admin-portal'] == true && in_array(Config::get('pga_config.wsis')['admin-role-name'], $userRoles)) {
                 Session::put("super-admin", true);
             }
             CommonUtilities::store_id_in_session($username);
@@ -237,21 +250,35 @@
         Session::put('oauth-expiration-time',$expirationTime);
 
         Session::put("roles", $userRoles);
-        if (in_array(Config::get('pga_config.wsis')['admin-role-name'], $userRoles)) {
+        // AIRAVATA-3086: get gateway groups and get the groups this user is a member of
+        $gatewayGroups = Airavata::getGatewayGroups($authzToken);
+        $groupMemberships = GroupManagerService::getAllGroupsUserBelongs(
+            $authzToken, $username . "@" . Config::get('pga_config.airavata')['gateway-id']);
+        $get_group_id = function($group) {
+            return $group->id;
+        };
+        $userGroupIds = array_map($get_group_id, $groupMemberships);
+        // AIRAVATA-3086: check if user is in Admins group
+        if (in_array($gatewayGroups->adminsGroupId, $userGroupIds)) {
             Session::put("admin", true);
         }
-        if (in_array(Config::get('pga_config.wsis')['read-only-admin-role-name'], $userRoles)) {
+        // AIRAVATA-3086: check if user is in Read Only Admins group
+        if (in_array($gatewayGroups->readOnlyAdminsGroupId, $userGroupIds)) {
+            Session::put("authorized-user", true);
             Session::put("admin-read-only", true);
         }
-        if (in_array(Config::get('pga_config.wsis')['user-role-name'], $userRoles)) {
+        // AIRAVATA-3086: check if user is in default Gateway Users group
+        if (in_array($gatewayGroups->defaultGatewayUsersGroupId, $userGroupIds)) {
             Session::put("authorized-user", true);
         }
+        // AIRAVATA-3086: leave this for scigap/super-admin portal
         //gateway-provider-code
         if (in_array("gateway-provider", $userRoles)) {
             Session::put("gateway-provider", true);
         }
+        // AIRAVATA-3086: for scigap/super-admin portal, keep same role-based rules
         //only for super admin
-        if(  Config::get('pga_config.portal')['super-admin-portal'] == true && Session::has("admin")){
+        if(  Config::get('pga_config.portal')['super-admin-portal'] == true && in_array(Config::get('pga_config.wsis')['admin-role-name'], $userRoles)) {
             Session::put("super-admin", true);
         }
 
@@ -359,7 +386,6 @@
             return Redirect::to("login");
         }
 
-        $userRoles = Session::get("roles");
         if (Session::has("user-profile")) {
             $userEmail = Session::get("user-profile")->emails[0];
         } else {