initial commit
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import React from 'react';
|
||||
import { Navigate } from 'react-router-dom';
|
||||
import { pb } from './pocketbase';
|
||||
import { useSettingsStore } from '../store/settings';
|
||||
|
||||
export type UserRole = 'advisor' | 'technician' | 'mobile';
|
||||
|
||||
function roleFromModel(): UserRole | null {
|
||||
const role = pb.authStore.model?.role as string | undefined;
|
||||
if (role === 'advisor' || role === 'technician' || role === 'mobile') return role;
|
||||
return null;
|
||||
}
|
||||
|
||||
function roleFromSettings(): UserRole {
|
||||
const { businessType } = useSettingsStore.getState().settings;
|
||||
if (businessType === 'advisor' || businessType === 'shop') return 'advisor';
|
||||
if (businessType === 'mobile' || businessType === 'home') return 'mobile';
|
||||
return 'advisor';
|
||||
}
|
||||
|
||||
export function getCurrentUserRole(): UserRole {
|
||||
return roleFromModel() ?? roleFromSettings();
|
||||
}
|
||||
|
||||
export function isOwnerRole(role: UserRole): boolean {
|
||||
return role === 'advisor' || role === 'mobile';
|
||||
}
|
||||
|
||||
export function isTechnicianRole(role: UserRole): boolean {
|
||||
return role === 'technician';
|
||||
}
|
||||
|
||||
export function RequireOwnerRole({ children }: { children: React.ReactNode }) {
|
||||
if (isTechnicianRole(getCurrentUserRole())) {
|
||||
return React.createElement(Navigate, { to: '/technician', replace: true });
|
||||
}
|
||||
return React.createElement(React.Fragment, null, children);
|
||||
}
|
||||
Reference in New Issue
Block a user