Desenvolvedores
src_
acess
isAdminOrCreatedBy.ts

🔑 Função isAdminOrCreatedBy - Acesso Administrativo ou Propriedade

Esta função é essencial para controlar o acesso a recursos, verificando se um usuário tem privilégios administrativos ou é o criador de um recurso. A função isAdminOrCreatedBy faz uma verificação dupla: primeiro, se o usuário é um administrador; caso contrário, se ele é o criador do recurso.

📜 Descrição da Função

A função isAdminOrCreatedBy tem como objetivo determinar o nível de acesso de um usuário. Ela retorna true se o usuário for um administrador. Caso contrário, ela verifica se o usuário é o criador do recurso. Se o usuário for o criador, ele também terá acesso ao recurso, proporcionando flexibilidade no controle de permissões.

📝 Código

Primeiro, a função importa o tipo Access do módulo payload:

import { Access } from 'payload'

A função isAdminOrCreatedBy começa com a verificação do papel de administrador:

export const isAdminOrCreatedBy: Access = ({ req: { user } }) => {
  // Verifica se o usuário é administrador
  if (user?.collection === 'colaboradores' && user.role === 'admin') {
    return true
  }

Se o usuário for um administrador, a função retorna true, permitindo acesso ao recurso. Caso contrário, verifica-se se o usuário é o criador do recurso:

  // Verifica se o usuário é o criador do recurso
  if (user) {
    return {
      createdBy: {
        equals: user.id,
      },
    }
  }

Se o usuário for o criador do recurso, ele terá acesso, retornando um filtro de consulta para a propriedade createdBy. Se nenhuma das condições for atendida, a função retorna false:

  // Se não for administrador nem criador, retorna falso
  return false
}

⚙️ Código Completo

import { Access } from 'payload'
 
export const isAdminOrCreatedBy: Access = ({ req: { user } }) => {
  // Verifica se o usuário é administrador
  if (user?.collection === 'colaboradores' && user.role === 'admin') {
    return true
  }
 
  // Verifica se o usuário é o criador do recurso
  if (user) {
    return {
      createdBy: {
        equals: user.id,
      },
    }
  }
 
  // Se não for administrador nem criador, retorna falso
  return false
}

🔗 Documentação Completa da Pasta access ** - Veja aqui (opens in a new tab)