Files
mikromon/mikromon/services/acl.py
Mateusz Gruszczyński e8f6c4c609 push
2026-03-05 15:53:33 +01:00

17 lines
689 B
Python

from ..models import Share, Permission, ShareTarget
def permission_rank(p: str) -> int:
return {"view": 1, "edit": 2, "manage": 3}.get(p, 0)
def has_permission(user, target_type: str, target_id: int, required: str, owner_id: int) -> bool:
if user.is_authenticated and getattr(user, "is_admin", lambda: False)():
return True
if user.is_authenticated and user.id == owner_id:
return True
if not user.is_authenticated:
return False
share = Share.query.filter_by(target_type=target_type, target_id=target_id, user_id=user.id).first()
if not share:
return False
return permission_rank(share.permission) >= permission_rank(required)