PluginProbe
Yatra – Travel Booking & Tour Operator Software / 3.0.2.8
Yatra – Travel Booking & Tour Operator Software v3.0.2.8
3.0.15 3.0.14 3.0.14.1 3.0.14.2 3.0.12 3.0.13 3.0.11 3.0.10 3.0.9 3.0.8 3.0.7 3.0.6 3.0.5 3.0.5.1 3.0.4 3.0.3 3.0.2.9 3.0.2.7 3.0.2.8 3.0.2.6 trunk 1.0.0 2.0.0 2.0.1 2.0.10 All 83 releases
yatra / resources / js / hooks / usePermissions.ts

usePermissions.ts in Yatra – Travel Booking & Tour Operator Software 3.0.2.8, at resources/js/hooks/usePermissions.ts

100 lines 2.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Permission and role checking hook
3 * Supports both free and Pro version role systems
4 */
5
6 import { useCallback, useMemo } from "react";
7
8 // Types are now in i18n.ts
9
10 interface UsePermissionsReturn {
11 can: (capability: string) => boolean;
12 hasRole: (role: string) => boolean;
13 isPro: boolean;
14 permissions: string[];
15 roles: string[];
16 }
17
18 /**
19 * Hook to check user permissions and roles
20 * @returns Permission checking functions
21 */
22 export const usePermissions = (): UsePermissionsReturn => {
23 const permissions = useMemo(() => {
24 return window.yatraAdmin?.permissions || [];
25 }, []);
26
27 const roles = useMemo(() => {
28 return window.yatraAdmin?.roles || [];
29 }, []);
30
31 const capabilities = useMemo(() => {
32 return window.yatraAdmin?.capabilities || {};
33 }, []);
34
35 const isPro = useMemo(() => {
36 return window.yatraAdmin?.isPro || false;
37 }, []);
38
39 /**
40 * Check if user has a specific capability
41 * @param capability - Capability to check
42 * @returns True if user has capability
43 */
44 const can = useCallback(
45 (capability: string): boolean => {
46 // Check direct capabilities
47 if (capabilities[capability] === true) {
48 return true;
49 }
50
51 // Check permissions array
52 if (permissions.includes(capability)) {
53 return true;
54 }
55
56 // Check for Pro-only features
57 if (capability.startsWith("yatra_pro_") && !isPro) {
58 return false;
59 }
60
61 // Default capabilities
62 const defaultCapabilities: Record<string, boolean> = {
63 manage_yatra: true, // Default admin capability
64 yatra_view_trips: true,
65 yatra_edit_trips: true,
66 yatra_delete_trips: true,
67 yatra_view_bookings: true,
68 yatra_edit_bookings: true,
69 yatra_delete_bookings: true,
70 yatra_view_customers: true,
71 yatra_edit_customers: true,
72 yatra_delete_customers: true,
73 yatra_view_reviews: true,
74 yatra_edit_reviews: true,
75 yatra_delete_reviews: true,
76 };
77
78 return defaultCapabilities[capability] || false;
79 },
80 [capabilities, permissions, isPro],
81 );
82
83 /**
84 * Check if user has a specific role
85 * @param role - Role to check
86 * @returns True if user has role
87 */
88 const hasRole = (role: string): boolean => {
89 return roles.includes(role);
90 };
91
92 return {
93 can,
94 hasRole,
95 isPro,
96 permissions,
97 roles,
98 };
99 };
100