feat: add dedicated sales_stats RBAC permission section

Separate sales statistics permissions from general stats:
- Add sales_stats section to PERMISSION_REGISTRY (read, export)
- Update all 6 sales-stats endpoints to require sales_stats:read
- Add sales_stats:* to Admin preset, sales_stats:read to Marketer preset
This commit is contained in:
Fringg
2026-03-05 05:46:01 +03:00
parent 9d7a557ef0
commit 8f29e2eee2
3 changed files with 9 additions and 6 deletions

View File

@@ -103,7 +103,7 @@ async def get_sales_summary(
days: int | None = Query(default=30, description='Preset period in days (7, 30, 90, 0=all)'),
start_date: str | None = Query(default=None, description='Custom start date ISO format'),
end_date: str | None = Query(default=None, description='Custom end date ISO format'),
admin: User = Depends(require_permission('stats:read')),
admin: User = Depends(require_permission('sales_stats:read')),
db: AsyncSession = Depends(get_cabinet_db),
) -> SalesSummary:
"""Get summary statistics for sales dashboard cards."""
@@ -272,7 +272,7 @@ async def get_trials_stats(
days: int | None = Query(default=30),
start_date: str | None = Query(default=None),
end_date: str | None = Query(default=None),
admin: User = Depends(require_permission('stats:read')),
admin: User = Depends(require_permission('sales_stats:read')),
db: AsyncSession = Depends(get_cabinet_db),
) -> TrialsStatsResponse:
"""Get trial registration statistics with provider breakdown."""
@@ -465,7 +465,7 @@ async def get_sales_stats(
days: int | None = Query(default=30),
start_date: str | None = Query(default=None),
end_date: str | None = Query(default=None),
admin: User = Depends(require_permission('stats:read')),
admin: User = Depends(require_permission('sales_stats:read')),
db: AsyncSession = Depends(get_cabinet_db),
) -> SalesStatsResponse:
"""Get subscription sales statistics."""
@@ -644,7 +644,7 @@ async def get_renewals_stats(
days: int | None = Query(default=30),
start_date: str | None = Query(default=None),
end_date: str | None = Query(default=None),
admin: User = Depends(require_permission('stats:read')),
admin: User = Depends(require_permission('sales_stats:read')),
db: AsyncSession = Depends(get_cabinet_db),
) -> RenewalsStatsResponse:
"""Get renewal statistics with period comparison."""
@@ -859,7 +859,7 @@ async def get_addons_stats(
days: int | None = Query(default=30),
start_date: str | None = Query(default=None),
end_date: str | None = Query(default=None),
admin: User = Depends(require_permission('stats:read')),
admin: User = Depends(require_permission('sales_stats:read')),
db: AsyncSession = Depends(get_cabinet_db),
) -> AddonsStatsResponse:
"""Get add-on purchase statistics."""
@@ -1015,7 +1015,7 @@ async def get_deposits_stats(
days: int | None = Query(default=30),
start_date: str | None = Query(default=None),
end_date: str | None = Query(default=None),
admin: User = Depends(require_permission('stats:read')),
admin: User = Depends(require_permission('sales_stats:read')),
db: AsyncSession = Depends(get_cabinet_db),
) -> DepositsStatsResponse:
"""Get deposit statistics with payment method breakdown."""

View File

@@ -55,6 +55,7 @@ PERMISSION_REGISTRY: dict[str, list[str]] = {
],
'tickets': ['read', 'reply', 'close', 'settings'],
'stats': ['read', 'export'],
'sales_stats': ['read', 'export'],
'broadcasts': ['read', 'create', 'edit', 'delete', 'send'],
'tariffs': ['read', 'create', 'edit', 'delete'],
'promocodes': ['read', 'create', 'edit', 'delete', 'stats'],

View File

@@ -39,6 +39,7 @@ _PRESET_ROLES: list[dict] = [
'users:*',
'tickets:*',
'stats:*',
'sales_stats:*',
'broadcasts:*',
'tariffs:*',
'promocodes:*',
@@ -90,6 +91,7 @@ _PRESET_ROLES: list[dict] = [
'promo_offers:*',
'promo_groups:*',
'stats:read',
'sales_stats:read',
'pinned_messages:*',
'wheel:*',
],