security/fix(front): fecha /update p/ superadmin + corrige deep-links
- /update (migração de banco) sai da lista sempre-liberada do isViewAllowed; passa a exigir superadmin (não-superadmin cai na view padrão; deslogado vai p/ landing). - ROUTE_MAP ganha /comissoes e /glosas (existiam em VIEW_TO_ROUTE mas faltavam aqui; refresh/deep-link nessas telas caía em dashboard). - (cadastro-dentista já estava mapeado — correção de equívoco da auditoria.) - Validado em DEV: build compila, app sobe, rotas resolvem (HTTP 200 SPA). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+5
-1
@@ -151,6 +151,9 @@ const ROUTE_MAP: Record<string, ViewKey> = {
|
||||
'/aguardando-convite': 'aguardando-convite',
|
||||
'/diretorio-profissionais': 'diretorio-profissionais',
|
||||
'/proteses': 'proteses',
|
||||
// Corrige deep-link/refresh: existiam em VIEW_TO_ROUTE mas faltavam aqui (caíam em dashboard).
|
||||
'/comissoes': 'comissoes',
|
||||
'/glosas': 'glosas',
|
||||
};
|
||||
|
||||
const VIEW_TO_ROUTE: Record<ViewKey, string> = {
|
||||
@@ -274,7 +277,8 @@ const App: React.FC = () => {
|
||||
const clinColor = activeWorkspace?.cor || '#2563eb';
|
||||
|
||||
const isViewAllowed = (view: ViewKey, role: string): boolean => {
|
||||
if (['landing', 'login', 'public', 'update'].includes(view)) return true;
|
||||
if (['landing', 'login', 'public'].includes(view)) return true;
|
||||
// /update (migração de banco) é EXCLUSIVA do superadmin (liberado na linha seguinte).
|
||||
if (role === 'superadmin') return true;
|
||||
// Sync GLOBAL removido do app (substituído pelo backup por clínica em Configurações).
|
||||
if (view === 'sync') return false;
|
||||
|
||||
Reference in New Issue
Block a user