feathersjs-ecosystem / feathers-permissions

Simple role and service method permissions for Feathers
MIT License
184 stars 29 forks source link

Upgrade feathers-permissions to be compatible with Feathers v5 (Dove) #152

Open noahsal opened 5 months ago

noahsal commented 5 months ago

Steps to reproduce

feathers-permissions currently uses Feathers 4.5.15. This library is not compatible with the latest Feathers v5 hook types. Specifically, the return type of checkPermissions (Hook) is not compatible with the new HookFunction type - Argument of type 'Hook' is not assignable to parameter of type 'HookFunction<A, S>.

The common solution seems to be to cast the checkPermissions hook to any (or some other matching type), which isn't ideal.

Expected behavior

Using the checkPermissions hook with Feathers v5 does not produce a type error.

Actual behavior

Type error when using checkPermissions hook with Feathers v5.

System configuration

Tell us about the applicable parts of your setup.

Module versions (especially the part that's not working):

NodeJS version: v20.3.0

Operating System: 14.3.1 (23D60)

Browser Version: Chrome Version 123.0.6312.59

noahsal commented 5 months ago

I just noticed that this duplicates the in-progress PR https://github.com/feathersjs-ecosystem/feathers-permissions/pull/125. However, that PR updates to a pre-release version instead of the now released latest version (and hasn't been touched in a while).

Going to leave this open for now, since the issue is still ongoing and doesn't seem to be actively in progress. Feel free to close if this duplicate violates issue guidelines.

aessig commented 2 months ago

@noahsal Hello, any news on this topic ?

noahsal commented 2 months ago

@aessig I think this issue has not been fixed yet. The checkPermissions function still uses Hook, but does not give any way for the user to supply generic types to make types compatible when a custom HookContext is used throughout the application.

For example, I have the following defined:

export type MyApplication = ExpressFeathers<MyServiceTypes>;
export type MyHookContext = FeathersHookContext<MyApplication>;

In order for checkPermissions to pass the type check I need to cast it as follows:

checkPermissions({
  ...
}) as HookFunction<MyHookContext>

It would be nice if I could just do something like checkPermissions<MyHookContext>(...), instead of needing to use an as cast.

aessig commented 1 month ago

@noahsal Thanks for the update, I hope it will be updated soon.