RABAC felépítése megtörtént ill hirdetési portál alapok lerakva
This commit is contained in:
@@ -494,9 +494,11 @@ class AssetService:
|
||||
Get the vehicle limit for a user, checking:
|
||||
1. Subscription tier JSONB rules['allowances']['max_vehicles'] (PRIMARY source of truth)
|
||||
2. Organization-level base_asset_limit (fallback if no user subscription)
|
||||
3. Config-based limits (legacy fallback)
|
||||
3. P0 BOOSTER: extra_allowances from finance.org_subscriptions (additive on top of tier)
|
||||
4. Config-based limits (legacy fallback)
|
||||
|
||||
P0: The subscription_tier JSONB rules are now the Single Source of Truth.
|
||||
P0 Booster: extra_allowances.extra_vehicles is added on top of the tier limit.
|
||||
Legacy string-based subscription_plan lookups have been removed.
|
||||
|
||||
Args:
|
||||
@@ -508,7 +510,7 @@ class AssetService:
|
||||
Maximum allowed vehicles
|
||||
"""
|
||||
from app.models.identity import User
|
||||
from app.models.core_logic import UserSubscription, SubscriptionTier
|
||||
from app.models.core_logic import UserSubscription, SubscriptionTier, OrganizationSubscription
|
||||
from app.models.marketplace.organization import Organization
|
||||
from app.services.config_service import config
|
||||
|
||||
@@ -577,7 +579,33 @@ class AssetService:
|
||||
except Exception as e:
|
||||
logger.debug(f"Could not read org subscription tier limit for org {org_id}: {e}")
|
||||
|
||||
# ── 3. CONFIG-BASED LIMIT (legacy fallback, role-based only) ──
|
||||
# ── 3. P0 BOOSTER: extra_allowances from finance.org_subscriptions ──
|
||||
# Extra allowances are additive on top of the tier limit.
|
||||
# Read from the active org subscription's extra_allowances JSONB.
|
||||
extra_vehicles = 0
|
||||
try:
|
||||
org_sub_stmt = (
|
||||
select(OrganizationSubscription.extra_allowances)
|
||||
.where(
|
||||
OrganizationSubscription.org_id == org_id,
|
||||
OrganizationSubscription.is_active == True
|
||||
)
|
||||
.limit(1)
|
||||
)
|
||||
org_sub_result = await db.execute(org_sub_stmt)
|
||||
extra_allowances = org_sub_result.scalar_one_or_none()
|
||||
|
||||
if extra_allowances and isinstance(extra_allowances, dict):
|
||||
extra_vehicles = int(extra_allowances.get('extra_vehicles', 0))
|
||||
if extra_vehicles > 0:
|
||||
logger.info(
|
||||
f"[P0 BOOSTER] Extra vehicles for org {org_id}: "
|
||||
f"extra_vehicles={extra_vehicles} (from extra_allowances JSONB)"
|
||||
)
|
||||
except Exception as e:
|
||||
logger.debug(f"Could not read extra_allowances for org {org_id}: {e}")
|
||||
|
||||
# ── 4. CONFIG-BASED LIMIT (legacy fallback, role-based only) ──
|
||||
config_limit = None
|
||||
try:
|
||||
limits = await config.get_setting(db, "VEHICLE_LIMIT")
|
||||
@@ -591,16 +619,20 @@ class AssetService:
|
||||
if config_limit is None:
|
||||
config_limit = 1 # absolute fallback
|
||||
|
||||
# ── 4. FINAL: Take the HIGHEST of all applicable limits ──
|
||||
# ── 5. FINAL: Take the HIGHEST of all applicable limits, then ADD boosters ──
|
||||
final_limit = config_limit
|
||||
if org_limit is not None:
|
||||
final_limit = max(final_limit, org_limit)
|
||||
if subscription_limit is not None:
|
||||
final_limit = max(final_limit, subscription_limit)
|
||||
|
||||
# Add extra_allowances on top of the base limit
|
||||
final_limit = final_limit + extra_vehicles
|
||||
|
||||
logger.info(
|
||||
f"[P0] Vehicle limit for user {user_id} (role={user_role}): "
|
||||
f"subscription_tier={subscription_limit}, org={org_limit}, config={config_limit}, "
|
||||
f"subscription_tier={subscription_limit}, org={org_limit}, "
|
||||
f"extra_vehicles={extra_vehicles}, config={config_limit}, "
|
||||
f"final={final_limit}"
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user