feat: update permissions

This commit is contained in:
ivannoskov
2026-02-10 17:15:38 +03:00
parent 6941915d76
commit e1117e46c8
13 changed files with 961 additions and 523 deletions

View File

@@ -10,6 +10,7 @@ import React, {
useState,
useEffect,
useCallback,
useMemo,
} from "react";
import { useParams, useRouter, usePathname } from "next/navigation";
import { workspacesApi, projectsApi, membersApi, authApi } from "@/lib/api";
@@ -57,6 +58,10 @@ interface WorkspaceContextType {
isAdmin: boolean;
// Check if user is admin in a specific workspace
isWorkspaceAdmin: (workspaceId: string) => Promise<boolean>;
// Analytics permission helpers (memoized values, not functions)
hasAnyAnalyticsPermission: boolean;
canViewSubscriptions: boolean;
canViewAnalytics: boolean;
// Loading states
isLoading: boolean;
@@ -182,6 +187,32 @@ export const WorkspaceProvider: React.FC<WorkspaceProviderProps> = ({
[permissions, isAdmin]
);
// ============================================================================
// Analytics Permission Helpers
// ============================================================================
// Check if user has any analytics permission
const hasAnyAnalyticsPermission = useMemo((): boolean => {
if (isAdmin) return true;
return (
hasPermission("analytics_read") ||
hasPermission("analytics_without_clicks") ||
hasPermission("analytics_own_creatives")
);
}, [hasPermission, isAdmin]);
// Check if user can view subscriptions (false if only analytics_without_clicks)
const canViewSubscriptions = useMemo((): boolean => {
if (isAdmin) return true;
return hasPermission("analytics_read");
}, [hasPermission, isAdmin]);
// Check if user can view analytics (any analytics permission)
const canViewAnalytics = useMemo((): boolean => {
if (isAdmin) return true;
return hasAnyAnalyticsPermission;
}, [hasAnyAnalyticsPermission, isAdmin]);
// ============================================================================
// Load Workspaces
// ============================================================================
@@ -519,6 +550,9 @@ export const WorkspaceProvider: React.FC<WorkspaceProviderProps> = ({
hasPermission,
isAdmin,
isWorkspaceAdmin,
hasAnyAnalyticsPermission,
canViewSubscriptions,
canViewAnalytics,
// Loading states
isLoading,