Skip to content

Commit 16d2d55

Browse files
authored
Adds multiple roles support to OrganizationMembership Create and Update (#302)
* Adds multiple roles support to OrganizationMembership Create and Update
1 parent 6fcfacd commit 16d2d55

4 files changed

Lines changed: 98 additions & 9 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: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -222,21 +222,29 @@ 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,
236-
"user_id" => $userId,
237-
"role_slug" => $roleSlug
237+
"user_id" => $userId
238238
];
239239

240+
if (!is_null($roleSlug)) {
241+
$params["role_slug"] = $roleSlug;
242+
}
243+
244+
if (!is_null($roleSlugs)) {
245+
$params["role_slugs"] = $roleSlugs;
246+
}
247+
240248
$response = Client::request(
241249
Client::METHOD_POST,
242250
$path,
@@ -300,19 +308,26 @@ public function deleteOrganizationMembership($organizationMembershipId)
300308
* Update a User organization membership.
301309
*
302310
* @param string $organizationMembershipId Organization Membership ID
303-
* @param string|null $role_slug The unique role identifier.
311+
* @param string|null $role_slug The unique slug of the role to grant to this membership.
312+
* @param string|null $role_slugs The unique slugs of the roles to grant to this membership.
304313
*
305314
* @throws Exception\WorkOSException
306315
*
307316
* @return Resource\OrganizationMembership
308317
*/
309-
public function updateOrganizationMembership($organizationMembershipId, $roleSlug = null)
318+
public function updateOrganizationMembership($organizationMembershipId, $roleSlug = null, $roleSlugs = null)
310319
{
311320
$path = "user_management/organization_memberships/{$organizationMembershipId}";
312321

313-
$params = [
314-
"role_slug" => $roleSlug
315-
];
322+
$params = [];
323+
324+
if (!is_null($roleSlug)) {
325+
$params["role_slug"] = $roleSlug;
326+
}
327+
328+
if (!is_null($roleSlugs)) {
329+
$params["role_slugs"] = $roleSlugs;
330+
}
316331

317332
$response = Client::request(
318333
Client::METHOD_PUT,

tests/WorkOS/UserManagementTest.php

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -893,7 +893,7 @@ public function testCreateOrganizationMembership()
893893
$params = [
894894
"organization_id" => $orgId,
895895
"user_id" => $userId,
896-
"role_slug" => $roleSlug
896+
"role_slug" => $roleSlug,
897897
];
898898

899899
$this->mockRequest(
@@ -912,6 +912,37 @@ public function testCreateOrganizationMembership()
912912
$this->assertSame($organizationMembership, $response->toArray());
913913
}
914914

915+
public function testCreateOrganizationMembershipWithRoleSlugs()
916+
{
917+
$userId = "user_01H7X1M4TZJN5N4HG4XXMA1234";
918+
$orgId = "org_01EHQMYV6MBK39QC5PZXHY59C3";
919+
$roleSlugs = ["admin"];
920+
$path = "user_management/organization_memberships";
921+
922+
$result = $this->organizationMembershipResponseFixture();
923+
924+
$params = [
925+
"organization_id" => $orgId,
926+
"user_id" => $userId,
927+
"role_slugs" => $roleSlugs,
928+
];
929+
930+
$this->mockRequest(
931+
Client::METHOD_POST,
932+
$path,
933+
null,
934+
$params,
935+
true,
936+
$result
937+
);
938+
939+
$organizationMembership = $this->organizationMembershipFixture();
940+
941+
$response = $this->userManagement->createOrganizationMembership($userId, $orgId, null, $roleSlugs);
942+
943+
$this->assertSame($organizationMembership, $response->toArray());
944+
}
945+
915946
public function testGetOrganizationMembership()
916947
{
917948
$organizationMembershipId = "om_01E4ZCR3C56J083X43JQXF3JK5";
@@ -1080,6 +1111,28 @@ public function testUpdateOrganizationMembership()
10801111
$this->assertSame($this->organizationMembershipFixture(), $response->toArray());
10811112
}
10821113

1114+
public function testUpdateOrganizationMembershipWithRoleSlugs()
1115+
{
1116+
$organizationMembershipId = "om_01E4ZCR3C56J083X43JQXF3JK5";
1117+
$roleSlugs = ["admin"];
1118+
$path = "user_management/organization_memberships/{$organizationMembershipId}";
1119+
1120+
$result = $this->organizationMembershipResponseFixture();
1121+
1122+
$this->mockRequest(
1123+
Client::METHOD_PUT,
1124+
$path,
1125+
null,
1126+
["role_slugs" => $roleSlugs],
1127+
true,
1128+
$result
1129+
);
1130+
1131+
$response = $this->userManagement->updateOrganizationMembership($organizationMembershipId, null, $roleSlugs);
1132+
$this->assertSame($this->organizationMembershipFixture(), $response->toArray());
1133+
}
1134+
1135+
10831136
public function testDeactivateOrganizationMembership()
10841137
{
10851138
$organizationMembershipId = "om_01E4ZCR3C56J083X43JQXF3JK5";
@@ -1396,6 +1449,11 @@ private function organizationMembershipResponseFixture($status = "active")
13961449
"role" => [
13971450
"slug" => "admin",
13981451
],
1452+
"roles" => [
1453+
[
1454+
"slug" => "admin",
1455+
],
1456+
],
13991457
"status" => $status,
14001458
"created_at" => "2021-06-25T19:07:33.155Z",
14011459
"updated_at" => "2021-06-25T19:07:33.155Z",
@@ -1415,6 +1473,11 @@ private function organizationMembershipListResponseFixture()
14151473
"role" => [
14161474
"slug" => "admin",
14171475
],
1476+
"roles" => [
1477+
[
1478+
"slug" => "admin",
1479+
]
1480+
],
14181481
"status" => "active",
14191482
"created_at" => "2021-06-25T19:07:33.155Z",
14201483
"updated_at" => "2021-06-25T19:07:33.155Z",
@@ -1438,6 +1501,11 @@ private function organizationMembershipFixture()
14381501
"role" => [
14391502
"slug" => "admin",
14401503
],
1504+
"roles" => [
1505+
[
1506+
"slug" => "admin",
1507+
],
1508+
],
14411509
"status" => "active",
14421510
"createdAt" => "2021-06-25T19:07:33.155Z",
14431511
"updatedAt" => "2021-06-25T19:07:33.155Z",

0 commit comments

Comments
 (0)