feat: implement permission checks for various actions across multiple resources, including acoes, atas, atestados, ausencias, ferias, and simbolos

This commit is contained in:
2025-12-12 09:26:30 -03:00
parent 4eb49d3e63
commit 92a9605417
8 changed files with 554 additions and 51 deletions

View File

@@ -147,6 +147,11 @@ export async function verificarLicencaAtiva(
export const listarTodos = query({
args: {},
handler: async (ctx) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'atestados_licencas',
acao: 'listar'
});
try {
const [atestados, licencas] = await Promise.all([
ctx.db.query('atestados').collect(),
@@ -258,6 +263,11 @@ export const listarTodos = query({
export const listarPorFuncionario = query({
args: { funcionarioId: v.id('funcionarios') },
handler: async (ctx, args) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'atestados_licencas',
acao: 'listar'
});
const [atestados, licencas] = await Promise.all([
ctx.db
.query('atestados')
@@ -285,6 +295,11 @@ export const listarPorPeriodo = query({
dataFim: v.string()
},
handler: async (ctx, args) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'atestados_licencas',
acao: 'listar'
});
const dataInicioObj = new Date(args.dataInicio);
const dataFimObj = new Date(args.dataFim);
@@ -327,6 +342,10 @@ export const verificarStatusLicenca = query({
},
returns: v.boolean(),
handler: async (ctx, args) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'atestados_licencas',
acao: 'listar'
});
return await verificarLicencaAtiva(ctx, args.funcionarioId);
}
});
@@ -339,6 +358,11 @@ export const obterDadosGraficos = query({
periodo: v.optional(v.number()) // dias (padrão: 30)
},
handler: async (ctx, args) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'atestados_licencas',
acao: 'dashboard'
});
try {
const dias = args.periodo || 30;
const dataLimite = Date.now() - dias * 24 * 60 * 60 * 1000;
@@ -588,6 +612,11 @@ export const obterDadosGraficos = query({
export const obterEstatisticas = query({
args: {},
handler: async (ctx) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'atestados_licencas',
acao: 'dashboard'
});
const hoje = new Date();
hoje.setHours(0, 0, 0, 0);
const inicioMes = new Date(hoje.getFullYear(), hoje.getMonth(), 1);
@@ -657,6 +686,11 @@ export const obterEventosCalendario = query({
)
},
handler: async (ctx, args) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'atestados_licencas',
acao: 'dashboard'
});
const eventos: Array<{
id: string;
title: string;
@@ -837,6 +871,11 @@ export const generateUploadUrl = mutation({
args: {},
returns: v.string(),
handler: async (ctx) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'atestados_licencas',
acao: 'criar'
});
const usuario = await getUsuarioAutenticado(ctx);
if (!usuario) throw new Error('Não autenticado');
@@ -853,6 +892,11 @@ export const obterUrlDocumento = query({
},
returns: v.union(v.string(), v.null()),
handler: async (ctx, args) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'atestados_licencas',
acao: 'listar'
});
const usuario = await getUsuarioAutenticado(ctx);
if (!usuario) throw new Error('Não autenticado');
@@ -874,6 +918,11 @@ export const criarAtestadoMedico = mutation({
},
returns: v.id('atestados'),
handler: async (ctx, args) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'atestados_licencas',
acao: 'criar'
});
const usuario = await getUsuarioAutenticado(ctx);
if (!usuario) throw new Error('Não autenticado');
@@ -932,6 +981,11 @@ export const criarDeclaracaoComparecimento = mutation({
},
returns: v.id('atestados'),
handler: async (ctx, args) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'atestados_licencas',
acao: 'criar'
});
const usuario = await getUsuarioAutenticado(ctx);
if (!usuario) throw new Error('Não autenticado');
@@ -990,6 +1044,11 @@ export const criarLicencaMaternidade = mutation({
},
returns: v.id('licencas'),
handler: async (ctx, args) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'atestados_licencas',
acao: 'criar'
});
const usuario = await getUsuarioAutenticado(ctx);
if (!usuario) throw new Error('Não autenticado');
@@ -1054,6 +1113,11 @@ export const criarLicencaPaternidade = mutation({
},
returns: v.id('licencas'),
handler: async (ctx, args) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'atestados_licencas',
acao: 'criar'
});
const usuario = await getUsuarioAutenticado(ctx);
if (!usuario) throw new Error('Não autenticado');
@@ -1112,6 +1176,11 @@ export const prorrogarLicencaMaternidade = mutation({
},
returns: v.id('licencas'),
handler: async (ctx, args) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'atestados_licencas',
acao: 'editar'
});
const usuario = await getUsuarioAutenticado(ctx);
if (!usuario) throw new Error('Não autenticado');
@@ -1169,6 +1238,11 @@ export const excluirAtestado = mutation({
},
returns: v.null(),
handler: async (ctx, args) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'atestados_licencas',
acao: 'excluir'
});
const usuario = await getUsuarioAutenticado(ctx);
if (!usuario) throw new Error('Não autenticado');
@@ -1215,6 +1289,11 @@ export const excluirLicenca = mutation({
},
returns: v.null(),
handler: async (ctx, args) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'atestados_licencas',
acao: 'excluir'
});
const usuario = await getUsuarioAutenticado(ctx);
if (!usuario) throw new Error('Não autenticado');