From 4301c36e258d206ff5ae94a2f69b87cc5636a4fa Mon Sep 17 00:00:00 2001 From: Michael Pisman Date: Sun, 22 Oct 2023 22:16:02 -0600 Subject: [PATCH 1/2] refactor: Changed argument type in ErrorWhileRemovingMember Changed user: Account to member: Member --- src/unipoll_api/exceptions/resource.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/unipoll_api/exceptions/resource.py b/src/unipoll_api/exceptions/resource.py index 75eb2a7..3559401 100644 --- a/src/unipoll_api/exceptions/resource.py +++ b/src/unipoll_api/exceptions/resource.py @@ -1,5 +1,5 @@ from fastapi import status -from unipoll_api.documents import Account, Resource, ResourceID +from unipoll_api.documents import Account, Resource, ResourceID, Member from unipoll_api.utils import Debug @@ -81,6 +81,6 @@ def __init__(self, resource: Resource, user: Account): # Error while removing member class ErrorWhileRemovingMember(APIException): - def __init__(self, resource: Resource, user: Account): + def __init__(self, resource: Resource, member: Member): super().__init__(code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"Error while removing user {user.email} from {resource.name} #{resource.id}") + detail=f"Error while removing user {member.id} from {resource.name} #{resource.id}") From 6f595ffb31be2b257ce477a91348499317e303e5 Mon Sep 17 00:00:00 2001 From: Michael Pisman Date: Sun, 22 Oct 2023 22:18:12 -0600 Subject: [PATCH 2/2] fix: Changed policy_holder_type for new policies The policy_holder_type was set to "member", updated the method to use type of policy_holder via get_document_type() method --- src/unipoll_api/documents.py | 8 ++++---- src/unipoll_api/schemas/policy.py | 10 +++++----- src/unipoll_api/utils/permissions.py | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/unipoll_api/documents.py b/src/unipoll_api/documents.py index 561d88c..66cfacc 100644 --- a/src/unipoll_api/documents.py +++ b/src/unipoll_api/documents.py @@ -49,9 +49,9 @@ class Resource(Document): def create_group(self) -> None: Debug.info(f'New {self.get_document_type()} "{self.id}" has been created') - async def add_policy(self, member: "Group | Member", permissions, save: bool = True) -> "Policy": - new_policy = Policy(policy_holder_type='member', - policy_holder=(await create_link(member)), + async def add_policy(self, policy_holder: "Group | Member", permissions, save: bool = True) -> "Policy": + new_policy = Policy(policy_holder_type=policy_holder.get_document_type(), # type: ignore + policy_holder=(await create_link(policy_holder)), permissions=permissions, parent_resource=(await create_link(self))) # type: ignore @@ -180,7 +180,7 @@ class Poll(Resource): class Policy(Document): id: ResourceID = Field(default_factory=ResourceID, alias="_id") parent_resource: Link[Workspace] | Link[Group] | Link[Poll] - policy_holder_type: Literal["member", "group"] + policy_holder_type: Literal["Member", "Group"] policy_holder: Link["Group"] | Link["Member"] permissions: int diff --git a/src/unipoll_api/schemas/policy.py b/src/unipoll_api/schemas/policy.py index 03b0f07..9262451 100644 --- a/src/unipoll_api/schemas/policy.py +++ b/src/unipoll_api/schemas/policy.py @@ -5,14 +5,14 @@ class Policy(BaseModel): id: ResourceID - policy_holder_type: Literal["member", "group"] + policy_holder_type: Literal["Member", "Group"] policy_holder: Member | Group permissions: int class PolicyShort(BaseModel): id: ResourceID - policy_holder_type: Literal["member", "group"] + policy_holder_type: Literal["Member", "Group"] policy_holder: Any = None permissions: Optional[Any] = None @@ -101,17 +101,17 @@ class AddPermission(BaseModel): "example": { "permissions": [ { - "type": "account", + "type": "Account", "id": "1a2b3c4d5e6f7g8h9i0j", "permission": "eff", }, { - "type": "account", + "type": "Account", "id": "2a3b4c5d6e7f8g9h0i1j", "permission": "a3", }, { - "type": "group", + "type": "Group", "id": "3a4b5c6d7e8f9g0h1i2j", "permission": "1", }, diff --git a/src/unipoll_api/utils/permissions.py b/src/unipoll_api/utils/permissions.py index e616d6d..059c5ef 100644 --- a/src/unipoll_api/utils/permissions.py +++ b/src/unipoll_api/utils/permissions.py @@ -100,7 +100,7 @@ async def get_all_permissions(resource, member) -> Permissions: # Get policies for the resource for policy in resource.policies: # Get policy for the user - if policy.policy_holder_type == "member": + if policy.policy_holder_type == "Member": policy_holder_id = None if hasattr(policy.policy_holder, "id"): # In case the policy_holder is an Account Document policy_holder_id = policy.policy_holder.id @@ -111,7 +111,7 @@ async def get_all_permissions(resource, member) -> Permissions: permission_sum |= policy.permissions # print("User permissions: ", policy.permissions) # If there is a group that user is a member of, add group permissions to the user permissions - elif policy.policy_holder_type == "group": + elif policy.policy_holder_type == "Group": # Try to fetch the group group = await policy.policy_holder.fetch() # BUG: sometimes links are not fetched properly