diff --git a/.gitignore b/.gitignore index de306388..18fe8f76 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,6 @@ vendor/ # PHPUnit /.phpunit.cache .phpunit.result.cache + +# IDEs +.idea/ \ No newline at end of file diff --git a/lib/Resource/OrganizationMembership.php b/lib/Resource/OrganizationMembership.php index 00667dcc..ce4ffe48 100644 --- a/lib/Resource/OrganizationMembership.php +++ b/lib/Resource/OrganizationMembership.php @@ -10,6 +10,7 @@ * @property string $userId * @property string $organizationId * @property RoleResponse $role + * @property array $roles * @property 'active'|'inactive'|'pending' $status * @property string $createdAt * @property string $updatedAt @@ -24,6 +25,7 @@ class OrganizationMembership extends BaseWorkOSResource "userId", "organizationId", "role", + "roles", "status", "createdAt", "updatedAt" @@ -35,6 +37,7 @@ class OrganizationMembership extends BaseWorkOSResource "user_id" => "userId", "organization_id" => "organizationId", "role" => "role", + "roles" => "roles", "status" => "status", "created_at" => "createdAt", "updated_at" => "updatedAt" diff --git a/lib/UserManagement.php b/lib/UserManagement.php index 51d8a9ef..d6f04877 100644 --- a/lib/UserManagement.php +++ b/lib/UserManagement.php @@ -222,21 +222,29 @@ public function deleteUser($userId) * @param string $userId User ID * @param string $organizationId Organization ID * @param string|null $roleSlug Role Slug + * @param string|null $roleSlugs Role Slugs * * @throws Exception\WorkOSException * * @return Resource\OrganizationMembership */ - public function createOrganizationMembership($userId, $organizationId, $roleSlug = null) + public function createOrganizationMembership($userId, $organizationId, $roleSlug = null, $roleSlugs = null) { $path = "user_management/organization_memberships"; $params = [ "organization_id" => $organizationId, - "user_id" => $userId, - "role_slug" => $roleSlug + "user_id" => $userId ]; + if (!is_null($roleSlug)) { + $params["role_slug"] = $roleSlug; + } + + if (!is_null($roleSlugs)) { + $params["role_slugs"] = $roleSlugs; + } + $response = Client::request( Client::METHOD_POST, $path, @@ -300,19 +308,26 @@ public function deleteOrganizationMembership($organizationMembershipId) * Update a User organization membership. * * @param string $organizationMembershipId Organization Membership ID - * @param string|null $role_slug The unique role identifier. + * @param string|null $role_slug The unique slug of the role to grant to this membership. + * @param string|null $role_slugs The unique slugs of the roles to grant to this membership. * * @throws Exception\WorkOSException * * @return Resource\OrganizationMembership */ - public function updateOrganizationMembership($organizationMembershipId, $roleSlug = null) + public function updateOrganizationMembership($organizationMembershipId, $roleSlug = null, $roleSlugs = null) { $path = "user_management/organization_memberships/{$organizationMembershipId}"; - $params = [ - "role_slug" => $roleSlug - ]; + $params = []; + + if (!is_null($roleSlug)) { + $params["role_slug"] = $roleSlug; + } + + if (!is_null($roleSlugs)) { + $params["role_slugs"] = $roleSlugs; + } $response = Client::request( Client::METHOD_PUT, diff --git a/tests/WorkOS/UserManagementTest.php b/tests/WorkOS/UserManagementTest.php index 9b9042c9..288f3603 100644 --- a/tests/WorkOS/UserManagementTest.php +++ b/tests/WorkOS/UserManagementTest.php @@ -893,7 +893,7 @@ public function testCreateOrganizationMembership() $params = [ "organization_id" => $orgId, "user_id" => $userId, - "role_slug" => $roleSlug + "role_slug" => $roleSlug, ]; $this->mockRequest( @@ -912,6 +912,37 @@ public function testCreateOrganizationMembership() $this->assertSame($organizationMembership, $response->toArray()); } + public function testCreateOrganizationMembershipWithRoleSlugs() + { + $userId = "user_01H7X1M4TZJN5N4HG4XXMA1234"; + $orgId = "org_01EHQMYV6MBK39QC5PZXHY59C3"; + $roleSlugs = ["admin"]; + $path = "user_management/organization_memberships"; + + $result = $this->organizationMembershipResponseFixture(); + + $params = [ + "organization_id" => $orgId, + "user_id" => $userId, + "role_slugs" => $roleSlugs, + ]; + + $this->mockRequest( + Client::METHOD_POST, + $path, + null, + $params, + true, + $result + ); + + $organizationMembership = $this->organizationMembershipFixture(); + + $response = $this->userManagement->createOrganizationMembership($userId, $orgId, null, $roleSlugs); + + $this->assertSame($organizationMembership, $response->toArray()); + } + public function testGetOrganizationMembership() { $organizationMembershipId = "om_01E4ZCR3C56J083X43JQXF3JK5"; @@ -1080,6 +1111,28 @@ public function testUpdateOrganizationMembership() $this->assertSame($this->organizationMembershipFixture(), $response->toArray()); } + public function testUpdateOrganizationMembershipWithRoleSlugs() + { + $organizationMembershipId = "om_01E4ZCR3C56J083X43JQXF3JK5"; + $roleSlugs = ["admin"]; + $path = "user_management/organization_memberships/{$organizationMembershipId}"; + + $result = $this->organizationMembershipResponseFixture(); + + $this->mockRequest( + Client::METHOD_PUT, + $path, + null, + ["role_slugs" => $roleSlugs], + true, + $result + ); + + $response = $this->userManagement->updateOrganizationMembership($organizationMembershipId, null, $roleSlugs); + $this->assertSame($this->organizationMembershipFixture(), $response->toArray()); + } + + public function testDeactivateOrganizationMembership() { $organizationMembershipId = "om_01E4ZCR3C56J083X43JQXF3JK5"; @@ -1396,6 +1449,11 @@ private function organizationMembershipResponseFixture($status = "active") "role" => [ "slug" => "admin", ], + "roles" => [ + [ + "slug" => "admin", + ], + ], "status" => $status, "created_at" => "2021-06-25T19:07:33.155Z", "updated_at" => "2021-06-25T19:07:33.155Z", @@ -1415,6 +1473,11 @@ private function organizationMembershipListResponseFixture() "role" => [ "slug" => "admin", ], + "roles" => [ + [ + "slug" => "admin", + ] + ], "status" => "active", "created_at" => "2021-06-25T19:07:33.155Z", "updated_at" => "2021-06-25T19:07:33.155Z", @@ -1438,6 +1501,11 @@ private function organizationMembershipFixture() "role" => [ "slug" => "admin", ], + "roles" => [ + [ + "slug" => "admin", + ], + ], "status" => "active", "createdAt" => "2021-06-25T19:07:33.155Z", "updatedAt" => "2021-06-25T19:07:33.155Z",