feat: Additional Household Permissions (#4158)

Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
This commit is contained in:
Michael Genson
2024-09-17 10:48:14 -05:00
committed by GitHub
parent b1820f9b23
commit fd0257c1b8
37 changed files with 690 additions and 185 deletions

View File

@@ -20,6 +20,11 @@ class OperationChecks:
# =========================================
# User Permission Checks
def can_manage_household(self) -> bool:
if not self.user.can_manage_household:
raise self.ForbiddenException
return True
def can_manage(self) -> bool:
if not self.user.can_manage:
raise self.ForbiddenException

View File

@@ -1,6 +1,6 @@
from functools import cached_property
from fastapi import Query
from fastapi import HTTPException, Query
from pydantic import UUID4
from mealie.routes._base.base_controllers import BaseUserController
@@ -10,6 +10,7 @@ from mealie.schema.group.group_preferences import ReadGroupPreferences, UpdateGr
from mealie.schema.group.group_statistics import GroupStorage
from mealie.schema.household.household import HouseholdSummary
from mealie.schema.response.pagination import PaginationQuery
from mealie.schema.response.responses import ErrorResponse
from mealie.schema.user.user import GroupSummary, UserSummary
from mealie.services.group_services.group_service import GroupService
@@ -42,6 +43,16 @@ class GroupSelfServiceController(BaseUserController):
households = self.repos.households.page_all(PaginationQuery(page=1, per_page=-1)).items
return [household.cast(HouseholdSummary) for household in households]
@router.get("/households/{slug}", response_model=HouseholdSummary)
def get_group_household(self, slug: str):
"""Returns a single household belonging to the current group"""
household = self.repos.households.get_by_slug_or_id(slug)
if not household:
raise HTTPException(status_code=404, detail=ErrorResponse.respond(message="No Entry Found"))
return household.cast(HouseholdSummary)
@router.get("/preferences", response_model=ReadGroupPreferences)
def get_group_preferences(self):
return self.group.preferences

View File

@@ -41,6 +41,8 @@ class HouseholdSelfServiceController(BaseUserController):
@router.put("/preferences", response_model=ReadHouseholdPreferences)
def update_household_preferences(self, new_pref: UpdateHouseholdPreferences):
self.checks.can_manage_household()
return self.repos.household_preferences.update(self.household_id, new_pref)
@router.put("/permissions", response_model=UserOut)
@@ -60,6 +62,7 @@ class HouseholdSelfServiceController(BaseUserController):
target_user.can_invite = permissions.can_invite
target_user.can_manage = permissions.can_manage
target_user.can_manage_household = permissions.can_manage_household
target_user.can_organize = permissions.can_organize
return self.repos.users.update(permissions.user_id, target_user)