feat: Plan-based feature permissions and quota enforcement
Backend: - Add HasQuota() permission factory for quota limits (resources, users, services, appointments, email templates, automated tasks) - Add HasFeaturePermission() factory for feature-based permissions (SMS, masked calling, custom domains, white label, plugins, webhooks, calendar sync, analytics) - Add has_feature() method to Tenant model for flexible permission checking - Add new tenant permission fields: can_create_plugins, can_use_webhooks, can_use_calendar_sync, can_export_data - Create Data Export API with CSV/JSON support for appointments, customers, resources, services - Create Analytics API with dashboard, appointments, revenue endpoints - Add calendar sync views and URL configuration Frontend: - Add usePlanFeatures hook for checking feature availability - Add UpgradePrompt components (inline, banner, overlay variants) - Add LockedSection wrapper and LockedButton for feature gating - Update settings pages with permission checks 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -31,6 +31,22 @@ export interface CustomDomain {
|
||||
verified_at?: string;
|
||||
}
|
||||
|
||||
export interface PlanPermissions {
|
||||
sms_reminders: boolean;
|
||||
webhooks: boolean;
|
||||
api_access: boolean;
|
||||
custom_domain: boolean;
|
||||
white_label: boolean;
|
||||
custom_oauth: boolean;
|
||||
plugins: boolean;
|
||||
export_data: boolean;
|
||||
video_conferencing: boolean;
|
||||
two_factor_auth: boolean;
|
||||
masked_calling: boolean;
|
||||
pos_system: boolean;
|
||||
mobile_app: boolean;
|
||||
}
|
||||
|
||||
export interface Business {
|
||||
id: string;
|
||||
name: string;
|
||||
@@ -63,6 +79,8 @@ export interface Business {
|
||||
resourceTypes?: ResourceTypeDefinition[]; // Custom resource types
|
||||
// Platform-controlled permissions
|
||||
canManageOAuthCredentials?: boolean;
|
||||
// Plan permissions (what features are available based on subscription)
|
||||
planPermissions?: PlanPermissions;
|
||||
}
|
||||
|
||||
export type UserRole = 'superuser' | 'platform_manager' | 'platform_support' | 'owner' | 'manager' | 'staff' | 'resource' | 'customer';
|
||||
|
||||
Reference in New Issue
Block a user