Simplify your stack and build anything. Or everything.
Build tomorrow’s web with a modern solution you truly own.
Code-based nature means you can build on top of it to power anything.
It’s time to take back your content infrastructure.

🚀 🔍 Revealing Role Types Safely in Admin Panel

default discord avatar
aaaravvlast year

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.



Solution:



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;


},


],


},


},



Explanation:



- The

role

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


- The

roleType

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

admin: { hidden: true }

configuration.


- By employing a

beforeChange

hook, the

roleType

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

    Star

    Chat on Discord

    Discord

    online

    Can't find what you're looking for?

    Get dedicated engineering support directly from the Payload team..