Executando verificação de segurança...
2

Controle de acesso estaticamente verificado com TypeScript

Esse é um experimento que eu venho fazendo há alguns dias.

A ideia é simples: você tem uma função someAdminAction() que só pode ser invocada por administradores. Ao tentar invocá-la no endpoint POST /unprivileged (ou qualquer outro) que espera somente usuários sem privilégio, o TypeScript suscita um diagnóstico. Isso porque entende-se que a função foi invocada num contexto inseguro.

Isso mesmo, uma potencial falha de segurança foi captada no dev/compile time. E isso sem usar nenhuma biblioteca ou plugin mirabolante, apenas tirando proveito do sistema de tipos do TypeScript. O PoC consiste apenas no seguinte (o highlight buga por algum motivo, mas é um código válido):

type RouteContext<TAcceptedRoles extends string> = {
  token: {
    sub: any
    roles: readonly TAcceptedRoles[]
  }
}

declare const route: <const TRoles extends string[]>(
  method: Uppercase<string>,
  path: `/${string}`,
  cb: (context: RouteContext<NoInfer<TRoles>[number]>) => any,
  options?: {
    roles: TRoles
  }
) => void

declare const businessLogic1: (context: RouteContext<'visitor'>) => void
declare const businessLogic2: (context: RouteContext<'manager'>) => void

route('GET', '/test', (context) => {
  businessLogic1(context) // ok
  businessLogic2(context) // Type '"visitor"' is not assignable to type '"manager"'

  return {
    success: true
  }
}, {
  roles: [
    'visitor'
  ]
})

Gostaria, com toda a sinceridade, de saber a opinião dos senhores, a respeito da aplicabilidade dessa técnica em cenários reais, se imaginam essa medida extra de segurança sendo efetiva, ou se soa apenas como pirotecnia.

O link agregado contém slides explicativos.

Carregando publicação patrocinada...