from utils.exceptions import NotFound, Forbidden from projects.repositories.projects_repository import ProjectsRepository from artists_moments.repository import ArtistsMomentsRepository from services.permission_role_service import PermissionsByRoleService from models.user_project import UserProjectRoles from utils.list_utils import any_present class ArtistsMomentsPermissions: role_service = PermissionsByRoleService() project_repository = ProjectsRepository() moments_repository = ArtistsMomentsRepository() def can_access_moment(self, user_id: int, project_id: int, moment_id: int): project = self.project_repository.get_project_by_id(project_id) moment = self.moments_repository.get_artists_moment_by_id(project_id, moment_id) if not moment or not project: raise NotFound() roles = self.role_service.get_roles_for_project(user_id, project) is_project_manager = any_present( [role.id for role in roles], ( UserProjectRoles.ADMIN.value, UserProjectRoles.EDITOR.value, ) ) is_moment_creator = moment.create_user_id == user_id if not is_moment_creator and not is_project_manager: raise Forbidden("You can't edit this moment")