🚀 🔍 Revealing Role Types Safely in Admin Panel

default discord avatar
aaaravv10 months ago

Hello👋🏻 Payload CMS Community,

I recently faced an interesting challenge involving role management within Payload CMS and wanted to share a solution that might benefit others encountering a similar situation.

Problem: I had a Roles collection that was managed by admins and referenced by the user collection. However, I needed to display the role type for each user in the admin panel, while keeping the Role collection hidden from unauthorized users.


I received a fantastic suggestion from Dan Ribbens, a Payload core member, which solved my problem elegantly. Here's how I implemented it using code snippets:

1. For the user collection, I added the following fields:


name: 'role',

label: 'Role',

type: 'relationship',

relationTo: 'roles',

access: {

read: () => true,




name: 'roleType',

label: 'Role Type',

type: 'text',

admin: {

hidden: true,


hooks: {

beforeChange: [

async ({ data }) => {

const { name } = await payload.findByID({

collection: 'roles',

id: data.role,


return name;






- The


field establishes a relationship with the 'roles' collection, allowing it to be read by anyone.

- The


field, crucial for our goal, is hidden from view using the

admin: { hidden: true }


- By employing a


hook, the


field is populated with the corresponding role type before any changes are made to the user's data.

Dan's insightful solution has not only resolved my issue but also ensured the security of sensitive data (since it was exposing object id). I'm immensely grateful for the guidance and would like to thank Dan for his exceptional support.

Feel free to integrate this solution into your Payload CMS setup and share your experience with the community. Let's continue learning and collaborating together!

    Star on GitHub


    Chat on Discord



    Can't find what you're looking for?

    Get help straight from the Payload team with an Enterprise License.