Code Monkey home page Code Monkey logo

Comments (11)

markpenaranda avatar markpenaranda commented on May 14, 2024 5

I made a guard for the standard restful endpoints

https://gist.github.com/markpenaranda/c43f0c48b9a54a62f5cc2e631d6cd173

from crud.

lapwat avatar lapwat commented on May 14, 2024

Yes it could work. Override the method and call the base method so the behavior does not change. You can now add your own decorators.

  @UseGuards(...)
  @UseInterceptors(...)
  @Override()
  getMany(
    @ParsedQuery() query: RestfulParamsDto,
    @ParsedOptions() options: CrudOptions,
  ) {
    return this.base.getManyBase(query, options);
  }

Another option is to add your decorator at the class level (if all endpoints have the same permissions).

from crud.

michaelyali avatar michaelyali commented on May 14, 2024

Hey. Thanks for your kind words. First, I would suggest not to use Pipes for role validation, but to use Guards instead, because guards are meant for such situations. Also, Guard can be attached to the whole Controller and you won't need to override your methods. Please take a look here in README - I've added some decorators and explained how and where it's better to use them. Please, also keep in mind that I released v3.0.0 a few minutes ago. Cheers!

from crud.

Diluka avatar Diluka commented on May 14, 2024

@zMotivat0r Maybe we can add an option to put custom decorators on CRUD methods.

from crud.

michaelyali avatar michaelyali commented on May 14, 2024

@Diluka I thought about it. But we still have to take in mind this proposal. And that's why I don't want to add a lot of things that might be changed in the future because of this new feature coming in Nest. What do you think?

from crud.

Diluka avatar Diluka commented on May 14, 2024

We already has target and name.

getManyBase(target: object, name: string, dto: any, crudOptions: CrudOptions) {
const prototype = (target as any).prototype;
prototype[name] = function getManyBase(

And this can apply custom decorators.

const p = Object.getOwnPropertyDescriptor(prototype, name);
Reflect.decorate(customDecorators, target, name, p);

We can add a feature to do the trick or refactor code to open a port let someone override by themselves.

But currently, the base methods are too heavy to be override.

As you say, this feature may be removed because the new feature in Nest.

And about the CrudOptions, maybe we shall put it in one place the controller's metadata.

export function RestfulParamsInterceptorFactory(crudOptions: CrudOptions): Function {

Interceptors can get controller type by calling ExecutionContext#getClass() method.

from crud.

michaelyali avatar michaelyali commented on May 14, 2024

@Diluka how much time will it take for you to create a PR for this?

from crud.

Diluka avatar Diluka commented on May 14, 2024

@zMotivat0r To implement this feature is quick. If you think it's OK, I'll create PR when I have some time.
But I suggest you can refactor CrudOptions in one place. Now it's merged and passed everywhere.

from crud.

michaelyali avatar michaelyali commented on May 14, 2024

@Diluka yeah, I'll refactor it. I'll store it in class metadata.

from crud.

michaelyali avatar michaelyali commented on May 14, 2024

@Diluka is there a chance that you are using Discord? https://discord.gg/T4TN67

from crud.

Diluka avatar Diluka commented on May 14, 2024

@zMotivat0r No, I am not using Discord.

Although there is nothing wrong with reading emails and documents. But the difficulty of instant messaging is still a bit too big. (Google Translate ┑( ̄Д  ̄)┍)

from crud.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.