feat: implement permission checks for various actions across multiple resources, including acoes, atas, atestados, ausencias, ferias, and simbolos
This commit is contained in:
@@ -321,6 +321,11 @@ function validarAcelerometro(
|
||||
export const generateUploadUrl = mutation({
|
||||
args: {},
|
||||
handler: async (ctx) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ponto',
|
||||
acao: 'registrar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
@@ -543,6 +548,11 @@ export const registrarPonto = mutation({
|
||||
justificativa: v.optional(v.string())
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ponto',
|
||||
acao: 'registrar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
@@ -921,6 +931,15 @@ export const listarRegistrosDia = query({
|
||||
_refresh: v.optional(v.number()) // Parâmetro usado pelo frontend para forçar refresh
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
try {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ponto',
|
||||
acao: 'ver'
|
||||
});
|
||||
} catch {
|
||||
return [];
|
||||
}
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario || !usuario.funcionarioId) {
|
||||
return [];
|
||||
@@ -967,6 +986,11 @@ export const obterSaldoDiario = query({
|
||||
data: v.string() // YYYY-MM-DD
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'ver'
|
||||
});
|
||||
|
||||
// Buscar banco de horas do dia
|
||||
const bancoHoras = await ctx.db
|
||||
.query('bancoHoras')
|
||||
@@ -1007,15 +1031,22 @@ export const listarRegistrosPeriodo = query({
|
||||
dataFim: v.string() // YYYY-MM-DD
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
try {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ponto',
|
||||
acao: 'ver'
|
||||
});
|
||||
} catch {
|
||||
return [];
|
||||
}
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
console.warn('[listarRegistrosPeriodo] Usuário não autenticado');
|
||||
return [];
|
||||
}
|
||||
|
||||
// Verificar permissão (RH ou TI)
|
||||
// Por enquanto, permitir se tiver funcionarioId ou for admin
|
||||
// TODO: Implementar verificação de permissão adequada
|
||||
// Permissão já verificada acima (ponto.ver)
|
||||
|
||||
// Validar formato das datas
|
||||
if (!args.dataInicio || !args.dataFim) {
|
||||
@@ -1185,6 +1216,22 @@ export const obterEstatisticas = query({
|
||||
funcionarioId: v.optional(v.id('funcionarios'))
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
try {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ponto',
|
||||
acao: 'ver'
|
||||
});
|
||||
} catch {
|
||||
return {
|
||||
totalRegistros: 0,
|
||||
dentroDoPrazo: 0,
|
||||
foraDoPrazo: 0,
|
||||
totalFuncionarios: 0,
|
||||
funcionariosDentroPrazo: 0,
|
||||
funcionariosForaPrazo: 0
|
||||
};
|
||||
}
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
// Retornar estatísticas zeradas quando não autenticado
|
||||
@@ -1198,7 +1245,7 @@ export const obterEstatisticas = query({
|
||||
};
|
||||
}
|
||||
|
||||
// TODO: Verificar permissão (RH ou TI)
|
||||
// Permissão já verificada acima (ponto.ver)
|
||||
|
||||
let registros = await ctx.db
|
||||
.query('registrosPonto')
|
||||
@@ -1245,6 +1292,11 @@ export const obterRegistro = query({
|
||||
registroId: v.id('registrosPonto')
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ponto',
|
||||
acao: 'ver'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
@@ -1255,11 +1307,7 @@ export const obterRegistro = query({
|
||||
throw new Error('Registro não encontrado');
|
||||
}
|
||||
|
||||
// Verificar se o usuário tem permissão (próprio registro ou RH/TI)
|
||||
if (registro.funcionarioId !== usuario.funcionarioId) {
|
||||
// TODO: Verificar se é RH ou TI
|
||||
// Por enquanto, permitir
|
||||
}
|
||||
// Permissão já verificada acima (ponto.ver)
|
||||
|
||||
const funcionario = await ctx.db.get(registro.funcionarioId);
|
||||
let simbolo = null;
|
||||
@@ -1813,6 +1861,20 @@ export const obterHistoricoESaldoDia = query({
|
||||
_refresh: v.optional(v.number()) // Parâmetro usado pelo frontend para forçar refresh
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
try {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ponto',
|
||||
acao: 'ver'
|
||||
});
|
||||
} catch {
|
||||
return {
|
||||
registros: [],
|
||||
cargaHorariaDiaria: 0,
|
||||
horasTrabalhadas: 0,
|
||||
saldoMinutos: 0
|
||||
};
|
||||
}
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario || !usuario.funcionarioId) {
|
||||
console.warn('[obterHistoricoESaldoDia] Usuário não autenticado ou sem funcionarioId');
|
||||
@@ -1825,10 +1887,7 @@ export const obterHistoricoESaldoDia = query({
|
||||
};
|
||||
}
|
||||
|
||||
// Verificar se é o próprio funcionário ou tem permissão
|
||||
if (usuario.funcionarioId !== args.funcionarioId) {
|
||||
// TODO: Verificar permissão de RH
|
||||
}
|
||||
// Permissão já verificada acima (ponto.ver)
|
||||
|
||||
// Buscar registros do dia
|
||||
const registros = await ctx.db
|
||||
@@ -1890,15 +1949,17 @@ export const obterBancoHorasFuncionario = query({
|
||||
funcionarioId: v.id('funcionarios')
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'ver'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
}
|
||||
|
||||
// Verificar se é o próprio funcionário ou tem permissão
|
||||
if (usuario.funcionarioId !== args.funcionarioId) {
|
||||
// TODO: Verificar permissão de RH
|
||||
}
|
||||
// Permissão já verificada acima (banco_horas.ver)
|
||||
|
||||
// Buscar todos os registros de banco de horas do funcionário
|
||||
const bancosHoras = await ctx.db
|
||||
@@ -2056,15 +2117,17 @@ export const obterBancoHorasMensal = query({
|
||||
mes: v.string() // YYYY-MM
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'ver'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
}
|
||||
|
||||
// Verificar se é o próprio funcionário ou tem permissão
|
||||
if (usuario.funcionarioId !== args.funcionarioId) {
|
||||
// TODO: Verificar permissão de RH
|
||||
}
|
||||
// Permissão já verificada acima (banco_horas.ver)
|
||||
|
||||
const bancoMensal = await ctx.db
|
||||
.query('bancoHorasMensal')
|
||||
@@ -2119,15 +2182,17 @@ export const listarHistoricoMensal = query({
|
||||
mesFim: v.optional(v.string()) // YYYY-MM
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'ver'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
}
|
||||
|
||||
// Verificar se é o próprio funcionário ou tem permissão
|
||||
if (usuario.funcionarioId !== args.funcionarioId) {
|
||||
// TODO: Verificar permissão de RH
|
||||
}
|
||||
// Permissão já verificada acima (banco_horas.ver)
|
||||
|
||||
let query = ctx.db
|
||||
.query('bancoHorasMensal')
|
||||
@@ -2242,15 +2307,17 @@ export const verificarAlertasBancoHoras = query({
|
||||
funcionarioId: v.id('funcionarios')
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'ver'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
}
|
||||
|
||||
// Verificar se é o próprio funcionário ou tem permissão
|
||||
if (usuario.funcionarioId !== args.funcionarioId) {
|
||||
// TODO: Verificar permissão de RH
|
||||
}
|
||||
// Permissão já verificada acima (banco_horas.ver)
|
||||
|
||||
// Buscar banco de horas mensal mais recente
|
||||
const hoje = new Date();
|
||||
@@ -2356,6 +2423,11 @@ export const editarRegistroPonto = mutation({
|
||||
observacoes: v.optional(v.string())
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ponto',
|
||||
acao: 'editar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
@@ -2441,6 +2513,11 @@ export const ajustarBancoHoras = mutation({
|
||||
ajusteMinutos: v.number()
|
||||
}),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'ajustar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
@@ -2564,6 +2641,11 @@ export const listarHomologacoes = query({
|
||||
funcionarioId: v.optional(v.id('funcionarios'))
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ponto',
|
||||
acao: 'editar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
@@ -2650,6 +2732,11 @@ export const excluirHomologacao = mutation({
|
||||
homologacaoId: v.id('homologacoesPonto')
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ponto',
|
||||
acao: 'editar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
@@ -2694,6 +2781,11 @@ export const excluirHomologacao = mutation({
|
||||
export const obterMotivosAtestados = query({
|
||||
args: {},
|
||||
handler: async (ctx) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'ajustar'
|
||||
});
|
||||
|
||||
// Buscar tipos de atestados e declarações
|
||||
const atestados = await ctx.db.query('atestados').collect();
|
||||
const tiposUnicos = new Set<string>();
|
||||
@@ -2733,6 +2825,11 @@ export const criarDispensaRegistro = mutation({
|
||||
isento: v.boolean()
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ponto',
|
||||
acao: 'editar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
@@ -2780,6 +2877,11 @@ export const removerDispensaRegistro = mutation({
|
||||
dispensaId: v.id('dispensasRegistro')
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ponto',
|
||||
acao: 'editar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
@@ -2814,6 +2916,11 @@ export const listarDispensas = query({
|
||||
apenasAtivas: v.optional(v.boolean())
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ponto',
|
||||
acao: 'editar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
@@ -2917,12 +3024,17 @@ export const obterEstatisticasBancoHorasGerencial = query({
|
||||
funcionarioId: v.optional(v.id('funcionarios'))
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'ver'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
}
|
||||
|
||||
// TODO: Verificar permissão de RH/TI
|
||||
// Permissão já verificada acima (banco_horas.ver)
|
||||
|
||||
// Buscar todos os bancos de horas do mês
|
||||
let bancosMensais = await ctx.db
|
||||
@@ -2997,15 +3109,17 @@ export const listarHistoricoAlteracoesBancoHoras = query({
|
||||
mes: v.optional(v.string()) // YYYY-MM - se fornecido, filtra por mês
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'ver'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
}
|
||||
|
||||
// Verificar se é o próprio funcionário ou tem permissão
|
||||
if (usuario.funcionarioId !== args.funcionarioId) {
|
||||
// TODO: Verificar permissão de RH
|
||||
}
|
||||
// Permissão já verificada acima (banco_horas.ver)
|
||||
|
||||
// Buscar homologações do funcionário
|
||||
let homologacoes = await ctx.db
|
||||
@@ -3089,6 +3203,11 @@ export const verificarDispensaAtiva = query({
|
||||
minuto: v.optional(v.number())
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ponto',
|
||||
acao: 'ver'
|
||||
});
|
||||
|
||||
const dispensas = await ctx.db
|
||||
.query('dispensasRegistro')
|
||||
.withIndex('by_funcionario', (q) => q.eq('funcionarioId', args.funcionarioId))
|
||||
@@ -3217,15 +3336,17 @@ export const obterBancoHorasCompleto = query({
|
||||
)
|
||||
}),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'ver'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
}
|
||||
|
||||
// Verificar se é o próprio funcionário ou tem permissão
|
||||
if (usuario.funcionarioId !== args.funcionarioId) {
|
||||
// TODO: Verificar permissão de RH
|
||||
}
|
||||
// Permissão já verificada acima (banco_horas.ver)
|
||||
|
||||
const bancoHoras = await ctx.db
|
||||
.query('bancoHoras')
|
||||
@@ -3314,15 +3435,17 @@ export const listarAjustesBancoHoras = query({
|
||||
})
|
||||
),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'ver'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
}
|
||||
|
||||
// Verificar se é o próprio funcionário ou tem permissão
|
||||
if (usuario.funcionarioId !== args.funcionarioId) {
|
||||
// TODO: Verificar permissão de RH
|
||||
}
|
||||
// Permissão já verificada acima (banco_horas.ver)
|
||||
|
||||
let query = ctx.db
|
||||
.query('ajustesBancoHoras')
|
||||
@@ -3402,6 +3525,11 @@ export const listarInconsistenciasBancoHoras = query({
|
||||
})
|
||||
),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'ver'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
@@ -3492,12 +3620,17 @@ export const obterConfiguracaoBancoHoras = query({
|
||||
v.null()
|
||||
),
|
||||
handler: async (ctx) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'configurar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
}
|
||||
|
||||
// TODO: Verificar permissão de TI
|
||||
// Permissão já verificada acima (banco_horas.configurar)
|
||||
|
||||
const config = await ctx.db.query('configuracaoBancoHoras').order('desc').first();
|
||||
|
||||
@@ -3540,12 +3673,17 @@ export const obterAlertasConfigurados = query({
|
||||
})
|
||||
),
|
||||
handler: async (ctx) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'configurar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
}
|
||||
|
||||
// TODO: Verificar permissão de TI
|
||||
// Permissão já verificada acima (banco_horas.configurar)
|
||||
|
||||
// Retornar todos os alertas (ativos e inativos) para permitir edição
|
||||
const alertas = await ctx.db.query('alertasBancoHoras').collect();
|
||||
@@ -3591,15 +3729,17 @@ export const verificarInconsistencias = query({
|
||||
})
|
||||
),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'ver'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
}
|
||||
|
||||
// Verificar se é o próprio funcionário ou tem permissão
|
||||
if (usuario.funcionarioId !== args.funcionarioId) {
|
||||
// TODO: Verificar permissão de RH
|
||||
}
|
||||
// Permissão já verificada acima (banco_horas.ver)
|
||||
|
||||
let query = ctx.db
|
||||
.query('inconsistenciasBancoHoras')
|
||||
@@ -3650,6 +3790,11 @@ export const criarAjusteBancoHoras = mutation({
|
||||
success: v.boolean()
|
||||
}),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'ajustar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
@@ -3745,6 +3890,11 @@ export const resolverInconsistencia = mutation({
|
||||
success: v.boolean()
|
||||
}),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'ajustar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
@@ -3794,12 +3944,17 @@ export const atualizarConfiguracaoBancoHoras = mutation({
|
||||
configId: v.id('configuracaoBancoHoras')
|
||||
}),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'configurar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
}
|
||||
|
||||
// TODO: Verificar permissão de TI
|
||||
// Permissão já verificada acima (banco_horas.configurar)
|
||||
|
||||
// Buscar configuração existente ou criar nova
|
||||
const configExistente = await ctx.db.query('configuracaoBancoHoras').order('desc').first();
|
||||
@@ -3854,12 +4009,17 @@ export const criarAlertaBancoHoras = mutation({
|
||||
alertaId: v.id('alertasBancoHoras')
|
||||
}),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'configurar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
}
|
||||
|
||||
// TODO: Verificar permissão de TI
|
||||
// Permissão já verificada acima (banco_horas.configurar)
|
||||
|
||||
// Verificar se já existe alerta do mesmo tipo
|
||||
const alertaExistente = await ctx.db
|
||||
@@ -3907,12 +4067,17 @@ export const atualizarConfiguracaoAlerta = mutation({
|
||||
success: v.boolean()
|
||||
}),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'configurar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
}
|
||||
|
||||
// TODO: Verificar permissão de TI
|
||||
// Permissão já verificada acima (banco_horas.configurar)
|
||||
|
||||
const alerta = await ctx.db.get(args.alertaId);
|
||||
if (!alerta) {
|
||||
@@ -3952,6 +4117,11 @@ export const recalcularBancoHoras = mutation({
|
||||
diasRecalculados: v.number()
|
||||
}),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'configurar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
@@ -4329,6 +4499,11 @@ export const inicializarAlertasPadrao = mutation({
|
||||
alertasCriados: v.number()
|
||||
}),
|
||||
handler: async (ctx) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'banco_horas',
|
||||
acao: 'configurar'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não autenticado');
|
||||
|
||||
Reference in New Issue
Block a user