Skip to content

Add support for enhancing resolvers with decorators by CRUD scope #300

@MichalLytek

Description

@MichalLytek

I am currently working on a project, using TypeGraphQL-Prisma, where I often encounter the case of 'any authenticated user can Read objects, but only admins can Create, Update, or Delete'.

as such my enhance maps look like this:

const resolversEnhanceMap: ResolversEnhanceMap = {
  Event: {
    event: [Authorized()],
    events: [Authorized()],
    findFirstEvent: [Authorized()],
    aggregateEvent: [Authorized()],
    createEvent: [Authorized<Role>(Role.ADMIN)],
    createManyEvent: [Authorized<Role>(Role.ADMIN)],
    upsertEvent: [Authorized<Role>(Role.ADMIN)],
    updateEvent: [Authorized<Role>(Role.ADMIN)],
    updateManyEvent: [Authorized<Role>(Role.ADMIN)],
    deleteEvent: [Authorized<Role>(Role.ADMIN)],
    deleteManyEvent: [Authorized<Role>(Role.ADMIN)],
  },
};

Might it be benificial to implement, in addition to the _all shorthand, shorthands like _create, _update, _read, and _delete?
It seems like this could already greatly reduce the amount of code needed to specify separate config for queries and mutations that belong together.

something like

const resolversEnhanceMap: ResolversEnhanceMap = {
  Event: {
    _create: [Authorized<Role>(Role.ADMIN)]
    _read: [Authorized()],
    _update: [Authorized<Role>(Role.ADMIN)]
    _delete: [Authorized<Role>(Role.ADMIN)]
  },
};

or even

const resolversEnhanceMap: ResolversEnhanceMap = {
  Event: {
    _mutate: [Authorized<Role>(Role.ADMIN)]
    _query: [Authorized()],
  },
};

This could still work in conjunction with the proposed overrides, if needed.

Originally posted by @MitchJans in #136 (comment)

Metadata

Metadata

Assignees

No one assigned

    Labels

    communitySomething initiated by the communityenhancementNew feature or requestpriority:mediumThis issue has a medium priority

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions