Theo's Typesafe CultTTC
Theo's Typesafe Cult3y ago
1 reply
FluX

Forms: How would you go about updating relations from the frontend?

(long-ish post)
I'm currently building an admin dashboard, where you can manage users for example.
A user can be edited by going to /dashboard/users/<userid>, and there I fetch the whole user object including relations (role object, permissions object).
model User {
    id                 String            @id @default(nanoid(14))
    displayName        String
    image              String
    role               UserRole          @relation(fields: [roleId], references: [id])
    roleId             String
    permissions        UserPermission[]
    createdAt          String
    updatedAt          String

    @@index([roleId])
}

model UserRole {
    id          String  @id @default(nanoid(14))
    name        String  @unique
    displayName String
    description String?
    user        User[]
}

model UserPermission {
    id          String  @id @default(nanoid(18))
    name        String  @unique
    displayName String
    description String?
    user        User[]
}

I'm using Formik to handle my user editing form and I'm a bit uncertain about how to tackle updating all of the relations - especially the permissions. I want these to be toggleable via checkboxes.

One way of doing this is to take the initial permissions object with all its nested permissions and create a copy of it (Formik does this for you). Then I can remove individual permissions from that object, or add a permissions unique name to it. Finally, I can compare that to the initial values and see which permissions got removed or which got added, and do multiple DB queries based on that (connect/disconnect user from permission). Maybe create endpoints like /addUserPermission and /removeUserPermission?

Is this a good approach? Or is there maybe a better way that requires fewer queries?
Was this page helpful?