from anydi import singleton from fansifter_common.auth.account import AccountAccess from fansifter_common.auth.services import AuthService from fansifter_common.auth.types import Permission from ows_text_campaigns.rosters.exceptions import ArtistNotInRosterError from ows_text_campaigns.rosters.repositories import ArtistRosterRepository @singleton class ArtistSettingsValidator: def __init__( self, auth_service: AuthService, artist_roster_repository: ArtistRosterRepository, ) -> None: self.auth_service = auth_service self.artist_roster_repository = artist_roster_repository def validate_roster_access( self, identity_id: str, global_participant_id: str, permission: Permission, ) -> AccountAccess: """Validate that user has permission and access to artist via roster.""" account_access = self.auth_service.authorize_for_permission( identity_id, permission=permission ) has_access = self.artist_roster_repository.exists_by_artist_and_any_account( global_participant_id=global_participant_id, vendor_ids=account_access.vendor_ids, subaccount_ids=account_access.subaccount_ids, ) if not has_access: raise ArtistNotInRosterError( global_participant_id=global_participant_id, ) return account_access