Skip to content

Commit e37c377

Browse files
committed
feat: add resource_type_slug to permissions, environment and organization roles
1 parent 401976b commit e37c377

File tree

8 files changed

+65
-0
lines changed

8 files changed

+65
-0
lines changed

src/workos/authorization.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ def create_permission(
5050
slug: str,
5151
name: str,
5252
description: Optional[str] = None,
53+
resource_type_slug: Optional[str] = None,
5354
) -> SyncOrAsync[Permission]: ...
5455

5556
def list_permissions(
@@ -133,6 +134,7 @@ def create_environment_role(
133134
slug: str,
134135
name: str,
135136
description: Optional[str] = None,
137+
resource_type_slug: Optional[str] = None,
136138
) -> SyncOrAsync[EnvironmentRole]: ...
137139

138140
def list_environment_roles(self) -> SyncOrAsync[EnvironmentRoleList]: ...
@@ -174,10 +176,13 @@ def create_permission(
174176
slug: str,
175177
name: str,
176178
description: Optional[str] = None,
179+
resource_type_slug: Optional[str] = None,
177180
) -> Permission:
178181
json: Dict[str, Any] = {"slug": slug, "name": name}
179182
if description is not None:
180183
json["description"] = description
184+
if resource_type_slug is not None:
185+
json["resource_type_slug"] = resource_type_slug
181186

182187
response = self._http_client.request(
183188
AUTHORIZATION_PERMISSIONS_PATH,
@@ -359,10 +364,13 @@ def create_environment_role(
359364
slug: str,
360365
name: str,
361366
description: Optional[str] = None,
367+
resource_type_slug: Optional[str] = None,
362368
) -> EnvironmentRole:
363369
json: Dict[str, Any] = {"slug": slug, "name": name}
364370
if description is not None:
365371
json["description"] = description
372+
if resource_type_slug is not None:
373+
json["resource_type_slug"] = resource_type_slug
366374

367375
response = self._http_client.request(
368376
"authorization/roles",
@@ -450,10 +458,13 @@ async def create_permission(
450458
slug: str,
451459
name: str,
452460
description: Optional[str] = None,
461+
resource_type_slug: Optional[str] = None,
453462
) -> Permission:
454463
json: Dict[str, Any] = {"slug": slug, "name": name}
455464
if description is not None:
456465
json["description"] = description
466+
if resource_type_slug is not None:
467+
json["resource_type_slug"] = resource_type_slug
457468

458469
response = await self._http_client.request(
459470
AUTHORIZATION_PERMISSIONS_PATH,
@@ -635,10 +646,13 @@ async def create_environment_role(
635646
slug: str,
636647
name: str,
637648
description: Optional[str] = None,
649+
resource_type_slug: Optional[str] = None,
638650
) -> EnvironmentRole:
639651
json: Dict[str, Any] = {"slug": slug, "name": name}
640652
if description is not None:
641653
json["description"] = description
654+
if resource_type_slug is not None:
655+
json["resource_type_slug"] = resource_type_slug
642656

643657
response = await self._http_client.request(
644658
"authorization/roles",

src/workos/types/authorization/environment_role.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class EnvironmentRole(WorkOSModel):
99
name: str
1010
slug: str
1111
description: Optional[str] = None
12+
resource_type_slug: str
1213
permissions: Sequence[str]
1314
type: Literal["EnvironmentRole"]
1415
created_at: str

src/workos/types/authorization/organization_role.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class OrganizationRole(WorkOSModel):
99
name: str
1010
slug: str
1111
description: Optional[str] = None
12+
resource_type_slug: str
1213
permissions: Sequence[str]
1314
type: Literal["OrganizationRole"]
1415
created_at: str

src/workos/types/authorization/permission.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class Permission(WorkOSModel):
99
slug: str
1010
name: str
1111
description: Optional[str] = None
12+
resource_type_slug: str
1213
system: bool
1314
created_at: str
1415
updated_at: str

tests/test_authorization.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,35 @@ def test_create_permission(
5353

5454
assert permission.id == "perm_01ABC"
5555
assert permission.slug == "documents:read"
56+
assert permission.resource_type_slug == "organization"
5657
assert request_kwargs["method"] == "post"
5758
assert request_kwargs["url"].endswith("/authorization/permissions")
5859
assert request_kwargs["json"] == {
5960
"slug": "documents:read",
6061
"name": "Read Documents",
6162
}
6263

64+
def test_create_permission_with_resource_type_slug(
65+
self, mock_permission, capture_and_mock_http_client_request
66+
):
67+
request_kwargs = capture_and_mock_http_client_request(
68+
self.http_client, mock_permission, 201
69+
)
70+
71+
syncify(
72+
self.authorization.create_permission(
73+
slug="documents:read",
74+
name="Read Documents",
75+
resource_type_slug="project",
76+
)
77+
)
78+
79+
assert request_kwargs["json"] == {
80+
"slug": "documents:read",
81+
"name": "Read Documents",
82+
"resource_type_slug": "project",
83+
}
84+
6385
def test_create_permission_with_description(
6486
self, mock_permission, capture_and_mock_http_client_request
6587
):
@@ -205,6 +227,7 @@ def test_create_organization_role(
205227

206228
assert role.id == "role_01ABC"
207229
assert role.type == "OrganizationRole"
230+
assert role.resource_type_slug == "organization"
208231
assert request_kwargs["method"] == "post"
209232
assert request_kwargs["url"].endswith(
210233
"/authorization/organizations/org_01EHT88Z8J8795GZNQ4ZP1J81T/roles"
@@ -366,10 +389,32 @@ def test_create_environment_role(
366389

367390
assert role.id == "role_01DEF"
368391
assert role.type == "EnvironmentRole"
392+
assert role.resource_type_slug == "organization"
369393
assert request_kwargs["method"] == "post"
370394
assert request_kwargs["url"].endswith("/authorization/roles")
371395
assert request_kwargs["json"] == {"slug": "member", "name": "Member"}
372396

397+
def test_create_environment_role_with_resource_type_slug(
398+
self, mock_environment_role, capture_and_mock_http_client_request
399+
):
400+
request_kwargs = capture_and_mock_http_client_request(
401+
self.http_client, mock_environment_role, 201
402+
)
403+
404+
syncify(
405+
self.authorization.create_environment_role(
406+
slug="member",
407+
name="Member",
408+
resource_type_slug="project",
409+
)
410+
)
411+
412+
assert request_kwargs["json"] == {
413+
"slug": "member",
414+
"name": "Member",
415+
"resource_type_slug": "project",
416+
}
417+
373418
def test_list_environment_roles(
374419
self, mock_environment_roles, capture_and_mock_http_client_request
375420
):

tests/utils/fixtures/mock_environment_role.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ def __init__(self, id: str):
1212
name="Member",
1313
slug="member",
1414
description="Default environment member role",
15+
resource_type_slug="organization",
1516
permissions=["documents:read"],
1617
type="EnvironmentRole",
1718
created_at=now,

tests/utils/fixtures/mock_organization_role.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ def __init__(
1717
name="Admin",
1818
slug="admin",
1919
description="Organization admin role",
20+
resource_type_slug="organization",
2021
permissions=["documents:read", "documents:write"],
2122
type="OrganizationRole",
2223
created_at=now,

tests/utils/fixtures/mock_permission.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ def __init__(self, id: str, slug: str = "documents:read"):
1212
slug=slug,
1313
name="Read Documents",
1414
description="Allows reading documents",
15+
resource_type_slug="organization",
1516
system=False,
1617
created_at=now,
1718
updated_at=now,

0 commit comments

Comments
 (0)