Skip to content

Commit

Permalink
Use permission ids instead of permission names
Browse files Browse the repository at this point in the history
  • Loading branch information
goFrendiAsgard committed Jan 5, 2025
1 parent d5740ec commit 1be8a4c
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 25 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import datetime
from typing import Any

from my_app_name.common.base_db_repository import BaseDBRepository
Expand Down Expand Up @@ -52,12 +53,20 @@ def _rows_to_responses(self, rows: list[tuple[Role, Permission]]) -> RoleRespons
for data in role_map.values()
]

async def add_permissions(self, data: dict[str, list[str]] = {}) -> Role:
async def add_permissions(
self, data: dict[str, list[str]], created_by: str
) -> Role:
now = datetime.datetime.now(datetime.timezone.utc)
role_permissions: list[RolePermission] = []
for role_id, permission_names in data.items():
for permission_name in permission_names:
for role_id, permission_ids in data.items():
for permission_id in permission_ids:
role_permissions.append(
RolePermission(role_id=role_id, permission_name=permission_name)
RolePermission(
role_id=role_id,
permission_id=permission_id,
created_at=now,
created_by=created_by,
)
)
async with self._session_scope() as session:
await self._execute_statement(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,15 @@ async def get_roles(
async def create_role_bulk(
self, data: list[RoleCreateWithPermissionsAndAudit]
) -> list[RoleResponse]:
permission_names = [row.get_permissions_names() for row in data]
permission_ids = [row.get_permissions_names() for row in data]
data = [row.get_role_update_with_audit() for row in data]
roles = await self.role_repository.create_bulk(data)
await self.role_repository.add_permissions(
{roles[i].id: permission_names[i] for i in range(roles)}
)
if len(roles) > 0:
created_by = roles[0].created_by
await self.role_repository.add_permissions(
data={roles[i].id: permission_ids[i] for i in range(roles)},
created_by=created_by,
)
return await self.role_repository.get_by_ids([role.id for role in roles])

@BaseService.route(
Expand All @@ -68,10 +71,12 @@ async def create_role_bulk(
async def create_role(
self, data: RoleCreateWithPermissionsAndAudit
) -> RoleResponse:
permission_names = data.get_permissions_names()
permission_ids = data.get_permissions_names()
data = data.get_role_update_with_audit()
role = await self.role_repository.create(data)
await self.role_repository.add_permissions({role.id: permission_names})
await self.role_repository.add_permissions(
data={role.id: permission_ids}, created_by=role.created_by
)
return await self.role_repository.get_by_id(role.id)

@BaseService.route(
Expand All @@ -82,13 +87,18 @@ async def create_role(
async def update_role_bulk(
self, role_ids: list[str], data: RoleUpdateWithPermissionsAndAudit
) -> RoleResponse:
permission_names = [row.get_permissions_names() for row in data]
permission_ids = [row.get_permissions_names() for row in data]
data = [row.get_role_update_with_audit() for row in data]
roles = await self.role_repository.update_bulk(role_ids, data)
await self.role_repository.remove_all_permissions([role.id for role in roles])
await self.role_repository.add_permissions(
{roles[i].id: permission_names[i] for i in range(roles)}
)
if len(roles) > 0:
updated_by = roles[0].updated_by
await self.role_repository.remove_all_permissions(
[role.id for role in roles]
)
await self.role_repository.add_permissions(
data={roles[i].id: permission_ids[i] for i in range(roles)},
created_by=updated_by,
)
return await self.role_repository.get_by_ids([role.id for role in roles])

@BaseService.route(
Expand All @@ -99,11 +109,13 @@ async def update_role_bulk(
async def update_role(
self, role_id: str, data: RoleUpdateWithPermissionsAndAudit
) -> RoleResponse:
permission_names = data.get_permissions_names()
permission_ids = data.get_permissions_names()
data = data.get_role_update_with_audit()
role = await self.role_repository.update(role_id, data)
await self.role_repository.remove_all_permissions([role.id])
await self.role_repository.add_permissions({role.id: permission_names})
await self.role_repository.add_permissions(
data={role.id: permission_ids}, created_by=role.updated_by
)
return await self.role_repository.get_by_id(role.id)

@BaseService.route(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class RoleCreateWithAudit(RoleCreate):


class RoleCreateWithPermissions(RoleCreate):
permissions: list[str] | None = None
permission_ids: list[str] | None = None

def with_audit(self, created_by: str) -> "RoleCreateWithPermissionsAndAudit":
return RoleCreateWithPermissionsAndAudit(
Expand All @@ -39,10 +39,10 @@ def get_role_create_with_audit(self) -> RoleCreateWithAudit:
}
return RoleCreateWithAudit(**data)

def get_permission_names(self) -> list[str]:
if self.permissions is None:
def get_permission_ids(self) -> list[str]:
if self.permission_ids is None:
return []
return self.permissions
return self.permission_ids


class RoleUpdate(SQLModel):
Expand All @@ -58,7 +58,7 @@ class RoleUpdateWithAudit(RoleUpdate):


class RoleUpdateWithPermissions(RoleUpdate):
permissions: list[str] | None = None
permission_ids: list[str] | None = None

def with_audit(self, updated_by: str) -> "RoleUpdateWithPermissionsAndAudit":
return RoleUpdateWithPermissionsAndAudit(
Expand All @@ -75,10 +75,10 @@ def get_role_update_with_audit(self) -> RoleUpdateWithAudit:
}
return RoleUpdateWithAudit(**data)

def get_permission_names(self) -> list[str]:
if self.permissions is None:
def get_permission_ids(self) -> list[str]:
if self.permission_ids is None:
return []
return self.permissions
return self.permission_ids


class RoleResponse(RoleBase):
Expand Down

0 comments on commit 1be8a4c

Please sign in to comment.