Skip to content

Commit f12ea4d

Browse files
committed
Adds multiple roles support to OrganizationMembership Create and Update
1 parent 6fcfacd commit f12ea4d

4 files changed

Lines changed: 87 additions & 7 deletions

File tree

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,6 @@ vendor/
66
# PHPUnit
77
/.phpunit.cache
88
.phpunit.result.cache
9+
10+
# IDEs
11+
.idea/

lib/Resource/OrganizationMembership.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
* @property string $userId
1111
* @property string $organizationId
1212
* @property RoleResponse $role
13+
* @property array<RoleResponse> $roles
1314
* @property 'active'|'inactive'|'pending' $status
1415
* @property string $createdAt
1516
* @property string $updatedAt
@@ -24,6 +25,7 @@ class OrganizationMembership extends BaseWorkOSResource
2425
"userId",
2526
"organizationId",
2627
"role",
28+
"roles",
2729
"status",
2830
"createdAt",
2931
"updatedAt"
@@ -35,6 +37,7 @@ class OrganizationMembership extends BaseWorkOSResource
3537
"user_id" => "userId",
3638
"organization_id" => "organizationId",
3739
"role" => "role",
40+
"roles" => "roles",
3841
"status" => "status",
3942
"created_at" => "createdAt",
4043
"updated_at" => "updatedAt"

lib/UserManagement.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -222,19 +222,21 @@ public function deleteUser($userId)
222222
* @param string $userId User ID
223223
* @param string $organizationId Organization ID
224224
* @param string|null $roleSlug Role Slug
225+
* @param string|null $roleSlugs Role Slugs
225226
*
226227
* @throws Exception\WorkOSException
227228
*
228229
* @return Resource\OrganizationMembership
229230
*/
230-
public function createOrganizationMembership($userId, $organizationId, $roleSlug = null)
231+
public function createOrganizationMembership($userId, $organizationId, $roleSlug = null, $roleSlugs = null)
231232
{
232233
$path = "user_management/organization_memberships";
233234

234235
$params = [
235236
"organization_id" => $organizationId,
236237
"user_id" => $userId,
237-
"role_slug" => $roleSlug
238+
"role_slug" => $roleSlug,
239+
"role_slugs" => $roleSlugs
238240
];
239241

240242
$response = Client::request(
@@ -300,18 +302,20 @@ public function deleteOrganizationMembership($organizationMembershipId)
300302
* Update a User organization membership.
301303
*
302304
* @param string $organizationMembershipId Organization Membership ID
303-
* @param string|null $role_slug The unique role identifier.
305+
* @param string|null $role_slug The unique slug of the role to grant to this membership.
306+
* @param string|null $role_slugs The unique slugs of the roles to grant to this membership.
304307
*
305308
* @throws Exception\WorkOSException
306309
*
307310
* @return Resource\OrganizationMembership
308311
*/
309-
public function updateOrganizationMembership($organizationMembershipId, $roleSlug = null)
312+
public function updateOrganizationMembership($organizationMembershipId, $roleSlug = null, $roleSlugs = null)
310313
{
311314
$path = "user_management/organization_memberships/{$organizationMembershipId}";
312315

313316
$params = [
314-
"role_slug" => $roleSlug
317+
"role_slug" => $roleSlug,
318+
"role_slugs" => $roleSlugs
315319
];
316320

317321
$response = Client::request(

tests/WorkOS/UserManagementTest.php

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -893,7 +893,8 @@ public function testCreateOrganizationMembership()
893893
$params = [
894894
"organization_id" => $orgId,
895895
"user_id" => $userId,
896-
"role_slug" => $roleSlug
896+
"role_slug" => $roleSlug,
897+
"role_slugs" => null,
897898
];
898899

899900
$this->mockRequest(
@@ -912,6 +913,38 @@ public function testCreateOrganizationMembership()
912913
$this->assertSame($organizationMembership, $response->toArray());
913914
}
914915

916+
public function testCreateOrganizationMembershipWithRoleSlugs()
917+
{
918+
$userId = "user_01H7X1M4TZJN5N4HG4XXMA1234";
919+
$orgId = "org_01EHQMYV6MBK39QC5PZXHY59C3";
920+
$roleSlugs = ["admin"];
921+
$path = "user_management/organization_memberships";
922+
923+
$result = $this->organizationMembershipResponseFixture();
924+
925+
$params = [
926+
"organization_id" => $orgId,
927+
"user_id" => $userId,
928+
"role_slug" => null,
929+
"role_slugs" => $roleSlugs,
930+
];
931+
932+
$this->mockRequest(
933+
Client::METHOD_POST,
934+
$path,
935+
null,
936+
$params,
937+
true,
938+
$result
939+
);
940+
941+
$organizationMembership = $this->organizationMembershipFixture();
942+
943+
$response = $this->userManagement->createOrganizationMembership($userId, $orgId, null, $roleSlugs);
944+
945+
$this->assertSame($organizationMembership, $response->toArray());
946+
}
947+
915948
public function testGetOrganizationMembership()
916949
{
917950
$organizationMembershipId = "om_01E4ZCR3C56J083X43JQXF3JK5";
@@ -1071,7 +1104,7 @@ public function testUpdateOrganizationMembership()
10711104
Client::METHOD_PUT,
10721105
$path,
10731106
null,
1074-
["role_slug" => $roleSlug],
1107+
["role_slug" => $roleSlug, "role_slugs" => null],
10751108
true,
10761109
$result
10771110
);
@@ -1080,6 +1113,28 @@ public function testUpdateOrganizationMembership()
10801113
$this->assertSame($this->organizationMembershipFixture(), $response->toArray());
10811114
}
10821115

1116+
public function testUpdateOrganizationMembershipWithRoleSlugs()
1117+
{
1118+
$organizationMembershipId = "om_01E4ZCR3C56J083X43JQXF3JK5";
1119+
$roleSlugs = ["admin"];
1120+
$path = "user_management/organization_memberships/{$organizationMembershipId}";
1121+
1122+
$result = $this->organizationMembershipResponseFixture();
1123+
1124+
$this->mockRequest(
1125+
Client::METHOD_PUT,
1126+
$path,
1127+
null,
1128+
["role_slug" => null, "role_slugs" => $roleSlugs],
1129+
true,
1130+
$result
1131+
);
1132+
1133+
$response = $this->userManagement->updateOrganizationMembership($organizationMembershipId, null, $roleSlugs);
1134+
$this->assertSame($this->organizationMembershipFixture(), $response->toArray());
1135+
}
1136+
1137+
10831138
public function testDeactivateOrganizationMembership()
10841139
{
10851140
$organizationMembershipId = "om_01E4ZCR3C56J083X43JQXF3JK5";
@@ -1396,6 +1451,11 @@ private function organizationMembershipResponseFixture($status = "active")
13961451
"role" => [
13971452
"slug" => "admin",
13981453
],
1454+
"roles" => [
1455+
[
1456+
"slug" => "admin",
1457+
],
1458+
],
13991459
"status" => $status,
14001460
"created_at" => "2021-06-25T19:07:33.155Z",
14011461
"updated_at" => "2021-06-25T19:07:33.155Z",
@@ -1415,6 +1475,11 @@ private function organizationMembershipListResponseFixture()
14151475
"role" => [
14161476
"slug" => "admin",
14171477
],
1478+
"roles" => [
1479+
[
1480+
"slug" => "admin",
1481+
]
1482+
],
14181483
"status" => "active",
14191484
"created_at" => "2021-06-25T19:07:33.155Z",
14201485
"updated_at" => "2021-06-25T19:07:33.155Z",
@@ -1438,6 +1503,11 @@ private function organizationMembershipFixture()
14381503
"role" => [
14391504
"slug" => "admin",
14401505
],
1506+
"roles" => [
1507+
[
1508+
"slug" => "admin",
1509+
],
1510+
],
14411511
"status" => "active",
14421512
"createdAt" => "2021-06-25T19:07:33.155Z",
14431513
"updatedAt" => "2021-06-25T19:07:33.155Z",

0 commit comments

Comments
 (0)