mirror of
https://github.com/idrainformatica/PecFlow.git
synced 2026-06-16 12:45:42 +02:00
Fix smtp
This commit is contained in:
@@ -61,12 +61,23 @@ class PermissionService:
|
||||
async def check_can_send(
|
||||
self, user: User, mailbox_id: uuid.UUID
|
||||
) -> bool:
|
||||
"""Verifica se l'utente può inviare dalla casella."""
|
||||
"""
|
||||
Verifica se l'utente può inviare dalla casella.
|
||||
|
||||
L'accesso in invio è concesso se:
|
||||
1. L'utente è admin del tenant, oppure
|
||||
2. L'utente ha un permesso diretto can_send sulla casella, oppure
|
||||
3. L'utente è assegnato a una Virtual Box attiva che include la casella.
|
||||
"""
|
||||
if user.role in ("super_admin", "admin"):
|
||||
return await self._mailbox_belongs_to_tenant(mailbox_id, user.tenant_id)
|
||||
|
||||
perm = await self._get_permission(user.id, mailbox_id)
|
||||
return perm is not None and perm.can_send
|
||||
if perm is not None and perm.can_send:
|
||||
return True
|
||||
|
||||
# Fallback: verifica accesso tramite Virtual Box
|
||||
return await self._check_vbox_mailbox_access(user.id, mailbox_id, user.tenant_id)
|
||||
|
||||
async def check_can_manage(
|
||||
self, user: User, mailbox_id: uuid.UUID
|
||||
@@ -234,3 +245,40 @@ class PermissionService:
|
||||
)
|
||||
)
|
||||
return result.scalar_one_or_none() is not None
|
||||
|
||||
async def _check_vbox_mailbox_access(
|
||||
self,
|
||||
user_id: uuid.UUID,
|
||||
mailbox_id: uuid.UUID,
|
||||
tenant_id: uuid.UUID,
|
||||
) -> bool:
|
||||
"""
|
||||
Verifica se l'utente ha accesso a una casella tramite Virtual Box.
|
||||
Restituisce True se l'utente è assegnato ad almeno una VBox attiva
|
||||
che include la casella specificata.
|
||||
"""
|
||||
from app.models.virtual_box import (
|
||||
VirtualBox,
|
||||
VirtualBoxAssignment,
|
||||
virtual_box_mailboxes,
|
||||
)
|
||||
|
||||
result = await self.db.execute(
|
||||
select(VirtualBox.id)
|
||||
.join(
|
||||
VirtualBoxAssignment,
|
||||
VirtualBox.id == VirtualBoxAssignment.virtual_box_id,
|
||||
)
|
||||
.join(
|
||||
virtual_box_mailboxes,
|
||||
VirtualBox.id == virtual_box_mailboxes.c.virtual_box_id,
|
||||
)
|
||||
.where(
|
||||
VirtualBoxAssignment.user_id == user_id,
|
||||
virtual_box_mailboxes.c.mailbox_id == mailbox_id,
|
||||
VirtualBox.tenant_id == tenant_id,
|
||||
VirtualBox.is_active == True,
|
||||
)
|
||||
.limit(1)
|
||||
)
|
||||
return result.scalar_one_or_none() is not None
|
||||
|
||||
Reference in New Issue
Block a user