Can Payload CMS support a multi-tenant Next.js application?

default discord avatar
rjzheng
9 months ago
6

We've built a MongoDB backed multi-tenant Next.js app where the domain of the web app will determine what project to load. Will Payload CMS be able to support this type of architecture? When we create content, we'll want to store them with an extra field

project: ObjectId

to correlate to the correct project.

  • discord user avatar
    jarrod_not_jared
    Payload Team
    9 months ago

    Yeah it can! Actually working on a client project doing multi tenant right now. In our case we have authors for content, and they are assigned (many) orgs. When they login we use an afterLogin hook (auth collection hook) to check the req.headers.host, that determines what org they are trying to login to by doing a lookup on orgs. Orgs have an array field with domains on it, so that’s what we are looking for, then we set a field on the user i.e. lastLoggedInOrg, and we use that field when they create content, assigning that org id to the content. In your case, projects are orgs.



    I may have missed a couple things, but that’s the gist. Then we lock the collections down by the user and the org they are assigned to. When fetching public data from a frontend you will have to specify an org/project in that query

  • discord user avatar
    jmikrut
    Payload Team
    9 months ago

    Also, i made a video about access control where we go through a high-level multi-tenant setup using

    sites

    as a tenant differentiator



    https://www.youtube.com/watch?v=DoPLyXG26Dg
  • default discord avatar
    rjzheng
    9 months ago

    Thanks guys, this looks great!

  • discord user avatar
    jacobsfletch
    Payload Team
    4 months ago

    We now have an official multi-tenant example! Check it out:

    https://github.com/payloadcms/payload/tree/master/examples/multi-tenant
  • default discord avatar
    techinverted
    3 months ago

    @jacobsfletch I want different clients to have access to different blocks which I as a super-admin can enable and disable. How would I go about building this? Any advice would be much appreciated

  • discord user avatar
    jacobsfletch
    Payload Team
    3 months ago

    For this you’d probably set up a new field on your tenants, like “features” or similar. This could be a list checkboxes to toggle various features on and off, such as blocks. Then in your pages config, you’d write conditional logic into each block to check against the tenants feature list, and if not found, hide the block.



    The tenants collection can lock down the feature list to super-admins only, so tenants can not make changes to their own feature set.

Open the post
Continue the discussion in Discord
Like what we're doing?
Star us on GitHub!

Star

Connect with the Payload Community on Discord

Discord

online

Can't find what you're looking for?

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