mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-12-29 21:37:15 -05:00
feat: Additional Household Permissions (#4158)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user