feat: implement permission checks for various actions across multiple resources, including acoes, atas, atestados, ausencias, ferias, and simbolos
This commit is contained in:
@@ -11,6 +11,11 @@ import { getCurrentUserFunction } from './auth';
|
||||
export const listarTodas = query({
|
||||
args: {},
|
||||
handler: async (ctx) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ausencias',
|
||||
acao: 'listar'
|
||||
});
|
||||
|
||||
const solicitacoes = await ctx.db.query('solicitacoesAusencias').collect();
|
||||
|
||||
const solicitacoesComDetalhes = await Promise.all(
|
||||
@@ -65,6 +70,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: 'ausencias',
|
||||
acao: 'criar'
|
||||
});
|
||||
|
||||
const solicitacoes = await ctx.db
|
||||
.query('solicitacoesAusencias')
|
||||
.withIndex('by_funcionario', (q) => q.eq('funcionarioId', args.funcionarioId))
|
||||
@@ -104,6 +114,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: 'ausencias',
|
||||
acao: 'aprovar'
|
||||
});
|
||||
|
||||
// Buscar times onde o usuário é gestor
|
||||
const timesGestor = await ctx.db
|
||||
.query('times')
|
||||
@@ -170,6 +185,11 @@ export const listarSolicitacoesSubordinados = query({
|
||||
export const obterDetalhes = query({
|
||||
args: { solicitacaoId: v.id('solicitacoesAusencias') },
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ausencias',
|
||||
acao: 'listar'
|
||||
});
|
||||
|
||||
const solicitacao = await ctx.db.get(args.solicitacaoId);
|
||||
if (!solicitacao) return null;
|
||||
|
||||
@@ -237,6 +257,11 @@ export const obterDetalhes = query({
|
||||
export const obterNotificacoesNaoLidas = query({
|
||||
args: { usuarioId: v.id('usuarios') },
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ausencias',
|
||||
acao: 'criar'
|
||||
});
|
||||
|
||||
const notificacoes = await ctx.db
|
||||
.query('notificacoesAusencias')
|
||||
.withIndex('by_destinatario_and_lida', (q) =>
|
||||
@@ -253,6 +278,11 @@ export const obterNotificacoesNaoLidas = query({
|
||||
export const contarPendentesGestor = query({
|
||||
args: { gestorId: v.id('usuarios') },
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ausencias',
|
||||
acao: 'aprovar'
|
||||
});
|
||||
|
||||
// Buscar times onde o usuário é gestor
|
||||
const timesGestor = await ctx.db
|
||||
.query('times')
|
||||
@@ -359,6 +389,11 @@ export const criarSolicitacao = mutation({
|
||||
},
|
||||
returns: v.id('solicitacoesAusencias'),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ausencias',
|
||||
acao: 'criar'
|
||||
});
|
||||
|
||||
// Validações
|
||||
if (args.motivo.trim().length < 10) {
|
||||
throw new Error('O motivo deve ter no mínimo 10 caracteres');
|
||||
@@ -547,6 +582,11 @@ export const aprovar = mutation({
|
||||
},
|
||||
returns: v.null(),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ausencias',
|
||||
acao: 'aprovar'
|
||||
});
|
||||
|
||||
const solicitacao = await ctx.db.get(args.solicitacaoId);
|
||||
if (!solicitacao) {
|
||||
throw new Error('Solicitação não encontrada');
|
||||
@@ -710,6 +750,11 @@ export const reprovar = mutation({
|
||||
},
|
||||
returns: v.null(),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ausencias',
|
||||
acao: 'reprovar'
|
||||
});
|
||||
|
||||
const solicitacao = await ctx.db.get(args.solicitacaoId);
|
||||
if (!solicitacao) {
|
||||
throw new Error('Solicitação não encontrada');
|
||||
@@ -866,6 +911,11 @@ export const marcarComoLida = mutation({
|
||||
},
|
||||
returns: v.null(),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ausencias',
|
||||
acao: 'criar'
|
||||
});
|
||||
|
||||
await ctx.db.patch(args.notificacaoId, {
|
||||
lida: true
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user