feat: implement permission checks for various actions across multiple resources, including acoes, atas, atestados, ausencias, ferias, and simbolos
This commit is contained in:
@@ -76,6 +76,11 @@ function agruparPorSolicitacao(registros: Array<Doc<'ferias'>>): Array<{
|
||||
export const listarTodas = query({
|
||||
args: {},
|
||||
handler: async (ctx) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ferias',
|
||||
acao: 'listar'
|
||||
});
|
||||
|
||||
const todasFerias = await ctx.db.query('ferias').collect();
|
||||
|
||||
const periodosComDetalhes = await Promise.all(
|
||||
@@ -146,6 +151,11 @@ export const listarMinhasSolicitacoes = query({
|
||||
_refresh: v.optional(v.number()) // Parâmetro para forçar atualização no frontend
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ferias',
|
||||
acao: 'dashboard'
|
||||
});
|
||||
|
||||
const todasFerias = await ctx.db
|
||||
.query('ferias')
|
||||
.withIndex('by_funcionario', (q) => q.eq('funcionarioId', args.funcionarioId))
|
||||
@@ -180,6 +190,11 @@ export const listarMinhasSolicitacoes = query({
|
||||
export const listarSolicitacoesSubordinados = query({
|
||||
args: { gestorId: v.id('usuarios') },
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ferias',
|
||||
acao: 'dashboard'
|
||||
});
|
||||
|
||||
// Buscar times onde o usuário é gestor
|
||||
const timesGestor = await ctx.db
|
||||
.query('times')
|
||||
@@ -259,6 +274,11 @@ export const obterDetalhes = query({
|
||||
feriasId: v.id('ferias')
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ferias',
|
||||
acao: 'ver'
|
||||
});
|
||||
|
||||
const ferias = await ctx.db.get(args.feriasId);
|
||||
|
||||
if (!ferias) return null;
|
||||
@@ -333,6 +353,11 @@ export const criarSolicitacao = mutation({
|
||||
},
|
||||
returns: v.array(v.id('ferias')),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ferias',
|
||||
acao: 'criar'
|
||||
});
|
||||
|
||||
if (args.periodos.length === 0) {
|
||||
throw new Error('É necessário adicionar pelo menos 1 período');
|
||||
}
|
||||
@@ -394,6 +419,11 @@ export const aprovar = mutation({
|
||||
},
|
||||
returns: v.null(),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ferias',
|
||||
acao: 'aprovar'
|
||||
});
|
||||
|
||||
// Buscar o registro específico
|
||||
const registro = await ctx.db.get(args.feriasId);
|
||||
|
||||
@@ -503,6 +533,11 @@ export const reprovar = mutation({
|
||||
},
|
||||
returns: v.null(),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ferias',
|
||||
acao: 'reprovar'
|
||||
});
|
||||
|
||||
// Buscar o registro específico
|
||||
const registro = await ctx.db.get(args.feriasId);
|
||||
|
||||
@@ -565,6 +600,11 @@ export const ajustarEAprovar = mutation({
|
||||
},
|
||||
returns: v.null(),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ferias',
|
||||
acao: 'aprovar'
|
||||
});
|
||||
|
||||
// Buscar o registro específico
|
||||
const registroAntigo = await ctx.db.get(args.feriasId);
|
||||
|
||||
@@ -676,6 +716,11 @@ export const verificarStatusFerias = query({
|
||||
args: { funcionarioId: v.id('funcionarios') },
|
||||
returns: v.union(v.literal('ativo'), v.literal('em_ferias')),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ferias',
|
||||
acao: 'ver'
|
||||
});
|
||||
|
||||
const hoje = new Date();
|
||||
hoje.setHours(0, 0, 0, 0);
|
||||
|
||||
@@ -721,6 +766,11 @@ export const verificarStatusFerias = query({
|
||||
export const obterNotificacoesNaoLidas = query({
|
||||
args: { usuarioId: v.id('usuarios') },
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ferias',
|
||||
acao: 'dashboard'
|
||||
});
|
||||
|
||||
return await ctx.db
|
||||
.query('notificacoesFerias')
|
||||
.withIndex('by_destinatario_and_lida', (q) =>
|
||||
@@ -735,6 +785,10 @@ export const marcarComoLida = mutation({
|
||||
args: { notificacaoId: v.id('notificacoesFerias') },
|
||||
returns: v.null(),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ferias',
|
||||
acao: 'dashboard'
|
||||
});
|
||||
await ctx.db.patch(args.notificacaoId, { lida: true });
|
||||
return null;
|
||||
}
|
||||
@@ -755,6 +809,11 @@ export const atualizarStatus = mutation({
|
||||
},
|
||||
returns: v.null(),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ferias',
|
||||
acao: 'editar_status'
|
||||
});
|
||||
|
||||
// Buscar o registro específico
|
||||
const registro = await ctx.db.get(args.feriasId);
|
||||
|
||||
@@ -1184,6 +1243,11 @@ export const atualizarMeuStatus = mutation({
|
||||
args: {},
|
||||
returns: v.null(),
|
||||
handler: async (ctx) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ferias',
|
||||
acao: 'atualizar_status'
|
||||
});
|
||||
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario || !usuario.funcionarioId) {
|
||||
throw new Error('Usuário não encontrado ou não possui funcionário associado');
|
||||
|
||||
Reference in New Issue
Block a user