feat: init usergroup linking to a course

This commit is contained in:
swve 2024-03-30 10:22:38 +00:00
parent a6152ef1f5
commit 4f75e6a90a
12 changed files with 428 additions and 55 deletions

View file

@ -9,6 +9,7 @@ from src.services.users.usergroups import (
add_users_to_usergroup,
create_usergroup,
delete_usergroup_by_id,
get_usergroups_by_resource,
read_usergroup_by_id,
read_usergroups_by_org_id,
remove_resources_from_usergroup,
@ -64,6 +65,19 @@ async def api_get_usergroups(
"""
return await read_usergroups_by_org_id(request, db_session, current_user, org_id)
@router.get("/resource/{resource_uuid}", response_model=list[UserGroupRead], tags=["usergroups"])
async def api_get_usergroupsby_resource(
*,
request: Request,
db_session: Session = Depends(get_db_session),
current_user: PublicUser = Depends(get_current_user),
resource_uuid: str,
) -> list[UserGroupRead]:
"""
Get UserGroups by Org
"""
return await get_usergroups_by_resource(request, db_session, current_user, resource_uuid)
@router.put("/{usergroup_id}", response_model=UserGroupRead, tags=["usergroups"])
async def api_update_usergroup(

View file

@ -119,6 +119,41 @@ async def read_usergroups_by_org_id(
return usergroups
async def get_usergroups_by_resource(
request: Request,
db_session: Session,
current_user: PublicUser | AnonymousUser,
resource_uuid: str,
) -> list[UserGroupRead]:
statement = select(UserGroupResource).where(
UserGroupResource.resource_uuid == resource_uuid
)
usergroup_resources = db_session.exec(statement).all()
# RBAC check
await rbac_check(
request,
usergroup_uuid="usergroup_X",
current_user=current_user,
action="read",
db_session=db_session,
)
usergroup_ids = [usergroup.usergroup_id for usergroup in usergroup_resources]
# get usergroups
usergroups = []
for usergroup_id in usergroup_ids:
statement = select(UserGroup).where(UserGroup.id == usergroup_id)
usergroup = db_session.exec(statement).first()
usergroups.append(usergroup)
usergroups = [UserGroupRead.from_orm(usergroup) for usergroup in usergroups]
return usergroups
async def update_usergroup_by_id(
request: Request,
db_session: Session,
@ -258,7 +293,6 @@ async def remove_users_from_usergroup(
detail="UserGroup not found",
)
# RBAC check
# RBAC check
await rbac_check(
request,
@ -312,8 +346,21 @@ async def add_resources_to_usergroup(
resources_uuids_array = resources_uuids.split(",")
for resource_uuid in resources_uuids_array:
# TODO : Find a way to check if resource exists
# Check if a link between UserGroup and Resource already exists
statement = select(UserGroupResource).where(
UserGroupResource.usergroup_id == usergroup_id,
UserGroupResource.resource_uuid == resource_uuid,
)
usergroup_resource = db_session.exec(statement).first()
if usergroup_resource:
raise HTTPException(
status_code=400,
detail=f"Resource {resource_uuid} already exists in UserGroup",
)
continue
# TODO : Find a way to check if resource really exists
usergroup_obj = UserGroupResource(
usergroup_id=usergroup_id,
resource_uuid=resource_uuid,