🔑 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)