Skip to content

Commit b0288e4

Browse files
committed
Add scope to role permission
1 parent 62985c4 commit b0288e4

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

weaviate/rbac/models.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from typing import List, Optional, Sequence, TypedDict, Union
55

66
from pydantic import BaseModel
7+
from typing_extensions import NotRequired
78

89
from weaviate.cluster.types import Verbosity
910
from weaviate.util import _capitalize_first_letter
@@ -36,6 +37,7 @@ class PermissionBackup(TypedDict):
3637

3738
class PermissionRoles(TypedDict):
3839
role: str
40+
scope: NotRequired[str]
3941

4042

4143
# action is always present in WeaviatePermission
@@ -191,14 +193,16 @@ def _to_weaviate(self) -> WeaviatePermission:
191193

192194
class _RolesPermission(_Permission):
193195
role: str
196+
scope: Optional[str] = None
194197
action: RolesAction
195198

196199
def _to_weaviate(self) -> WeaviatePermission:
200+
roles: PermissionRoles = {"role": self.role}
201+
if self.scope is not None:
202+
roles["scope"] = self.scope
197203
return {
198204
"action": self.action,
199-
"roles": {
200-
"role": self.role,
201-
},
205+
"roles": roles,
202206
}
203207

204208

@@ -554,8 +558,8 @@ def delete(*, collection: Optional[str] = None) -> TenantsPermission:
554558

555559
class _RolesFactory:
556560
@staticmethod
557-
def manage(*, role: Optional[str] = None) -> _RolesPermission:
558-
return _RolesPermission(role=role or "*", action=RolesAction.MANAGE)
561+
def manage(*, role: Optional[str] = None, scope: Optional[str] = None) -> _RolesPermission:
562+
return _RolesPermission(role=role or "*", action=RolesAction.MANAGE, scope=scope)
559563

560564
@staticmethod
561565
def read(*, role: Optional[str] = None) -> _RolesPermission:
@@ -673,16 +677,22 @@ def tenants(
673677

674678
@staticmethod
675679
def roles(
676-
*, role: Union[str, Sequence[str]], read: bool = False, manage: bool = False
680+
*,
681+
role: Union[str, Sequence[str]],
682+
read: bool = False,
683+
manage: Optional[Union[str, bool]] = None,
677684
) -> PermissionsCreateType:
678685
permissions: List[_Permission] = []
679686
if isinstance(role, str):
680687
role = [role]
681688
for r in role:
682689
if read:
683690
permissions.append(_RolesFactory.read(role=r))
684-
if manage:
685-
permissions.append(_RolesFactory.manage(role=r))
691+
if manage is not None:
692+
if isinstance(manage, bool):
693+
permissions.append(_RolesFactory.manage(role=r))
694+
else:
695+
permissions.append(_RolesFactory.manage(role=r, scope=manage))
686696
return permissions
687697

688698
@staticmethod

0 commit comments

Comments
 (0)