diff --git a/CHANGELOG.md b/CHANGELOG.md index d88ba029f4413c620a6a53f9eecaa7a5385c235e..302c7531860ae91249e619694371c8eb777d4326 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,7 @@ All notable changes to this project will be documented in this file. - sspmod_perun_LdapConnector to SimpleSAML\Module\perun\LdapConnector - sspmod_perun_RpcConnector to SimpleSAML\Module\perun\RpcConnector - Added disco-tpl template file + - Method getUsersGroupsOnFacility in AdapterRpc was optimized [Fixed] - Fixed the bug generating Array to string conversion Exception in PerunAttributes, diff --git a/lib/AdapterRpc.php b/lib/AdapterRpc.php index 805eed8296e3fdcb1234c18b53074d3f7a077f23..67e9eaf62d2b37570889a5faf646a633048367db 100644 --- a/lib/AdapterRpc.php +++ b/lib/AdapterRpc.php @@ -289,6 +289,7 @@ class AdapterRpc extends Adapter return $perunAttr['value']; } + public function getUsersGroupsOnFacility($spEntityId, $userId) { $facilities = $this->connector->get('facilitiesManager', 'getFacilitiesByAttribute', array( @@ -296,54 +297,37 @@ class AdapterRpc extends Adapter 'attributeValue' => $spEntityId, )); - $allowedResources = array(); - foreach ($facilities as $facility) { - $resources = $this->connector->get('facilitiesManager', 'getAssignedResources', array( - 'facility' => $facility['id'], - )); - $allowedResources = array_merge($allowedResources, $resources); - } + $groups = array(); - $members = $this->connector->get('membersManager', 'getMembersByUser', array( - 'user' => $userId, - )); + foreach ($facilities as $facility) { + $usersGroupsOnFacility = $this->connector->get( + 'usersManager', + 'getRichGroupsWhereUserIsActive', + array( + 'facility' => $facility['id'], + 'user' => $userId, + 'attrNames' => array('urn:perun:group:attribute-def:virt:voShortName') + ) + ); - $validMembers = array(); - foreach ($members as $member) { - if ($member['status'] === 'VALID') { - array_push($validMembers, $member); - } - } + foreach ($usersGroupsOnFacility as $usersGroupOnFacility) { + if (isset($usersGroupOnFacility['attributes'][0]['friendlyName']) && + $usersGroupOnFacility['attributes'][0]['friendlyName'] == 'voShortName') { + $uniqueName = $usersGroupOnFacility['attributes'][0]['value'] . ":" . $usersGroupOnFacility['name']; - $allGroups = array(); - foreach ($allowedResources as $resource) { - foreach ($validMembers as $member) { - $groups = $this->connector->get('resourcesManager', 'getAssignedGroups', array( - 'resource' => $resource['id'], - 'member' => $member['id'], - )); - foreach ($groups as $group) { - $attr = $this->connector->get('attributesManager', 'getAttribute', array( - 'group' => $group['id'], - 'attributeName' => 'urn:perun:group:attribute-def:virt:voShortName' + array_push($groups, new Group( + $usersGroupOnFacility['id'], + $usersGroupOnFacility['voId'], + $usersGroupOnFacility['name'], + $uniqueName, + $usersGroupOnFacility['description'] )); - $uniqueName = $attr['value'] . ":" . $group['name']; - array_push( - $allGroups, - new Group( - $group['id'], - $group['voId'], - $group['name'], - $uniqueName, - $group['description'] - ) - ); } } } + $groups = $this->removeDuplicateEntities($groups); - $allGroups = $this->removeDuplicateEntities($allGroups); - return $allGroups; + return $groups; } public function getFacilitiesByEntityId($spEntityId)