action_policy-graphql icon indicating copy to clipboard operation
action_policy-graphql copied to clipboard

Unable to override `authorization_namespace`

Open Tyflomate opened this issue 2 years ago • 6 comments

Tell us about your environment

Ruby Version: 2.7.1

Framework Version (Rails, whatever): Rails 6.1.4.1

Action Policy Version: 0.6.0

Action Policy GraphQL Version: 0.5.3

What did you do?

I'm trying to redefine authorization_namespace but nothing worked. For example for a mutation, the namespace is Mutations. When i tried to override it in BaseMutation, it was still Mutations. So i set a pry inside my definition but it was never reached. I also tried overriding it inside BaseObject or the GraphqlController directly but nothing worked.

What did you expect to happen?

To be able to custom the authorization_namespace

What actually happened?

My definition of authorization_namespace was never acknowledged.

Can you tell me how are we supposed to do this ? Thanks a lot

Tyflomate avatar Nov 30 '21 09:11 Tyflomate

Could you please provide a code example? Where do you include Action Policy behaviour and where do you override (and how) #authorization_namespace? I will try to reproduce it

palkan avatar Nov 30 '21 12:11 palkan

It is a classic RoR implementation of graphql. It is hard to give you a code example since it is a private repository :/ I tried overriding it in BaseMutation/BaseObject/ApplicationController(root of my graphql controller) classes. I put a pry inside each of my implementations but none was reached. In each of these classes i just did this:

def authorization_namespace
     ::UserApplication
end

If we have for example a policy like this: UserApplication::TotoPolicy. I also put a pry inside the library to see the output of this method but for a mutation Mutations::UserApplication::TestMutation, it would always return Mutations::UserApplication.

Tyflomate avatar Nov 30 '21 13:11 Tyflomate

It may be good to notice that in BaseMutation and BaseObject I have included include ActionPolicy::GraphQL::Behaviour

Tyflomate avatar Nov 30 '21 14:11 Tyflomate

Thanks for the details! (And sorry for late response)

I will do my best to work on this till the end of the year 🙂

palkan avatar Dec 28 '21 07:12 palkan

@Tyflomate I tried to reproduce the problem here but with no luck: https://github.com/palkan/action_policy-graphql/commit/58e89be6210213b3369fda05c1a6d5b93b2d339d

Maybe, you can try to tweak our test examples to demonstrate the failing case?

palkan avatar Dec 28 '21 10:12 palkan

Hey @Tyflomate! Was this issue resolved? And if not, could you please help with the reproduction (see the prev comment)?

palkan avatar Mar 16 '22 12:03 palkan

Hello @palkan

I encountered the same problem yesterday, maybe in another form.

Our environment is pretty much the same as @Tyflomate. To deduplicate behaviour declaration between our GraphQL types and mutations, I used an ActiveSupport::Concern to include in both base mutation and base object.

So far, it looks like:

module Authorizations
  extend ActiveSupport::Concern

  included do
    include ActionPolicy::GraphQL::Behaviour
    prepend LookupMethods
  end

  module LookupMethods
    def authorization_namespace = ::Api
    def default_authorization_policy_class = ::ApiPolicy
  end
end

We need to use prepend or lookup methods declared in action_policy/behaviours/namespaced.rb take precedence over our version of authorization_namespace.

On the other side, default_authorization_policy_class works however we define it: prepended, included or extended. I would have expected authorization_namespace to work the same.

gael-ian avatar Dec 20 '22 12:12 gael-ian

Hey @gael-ian!

Thanks for the snippet.

I see what's going on here: we define the #authorization_namespace method right on the class: https://github.com/palkan/action_policy-graphql/blob/58e89be6210213b3369fda05c1a6d5b93b2d339d/lib/action_policy/graphql/behaviour.rb#L25

That's why include doesn't work.

Agree, this is confusing, let's fix it.

palkan avatar Dec 23 '22 02:12 palkan

Nope, the code I linked above only affects authorized? callbacks—is this your case @gael-ian ? Otherwise, overriding #authorization_namespace works fine, see https://github.com/palkan/action_policy-graphql/commit/f0129eb1d0257573ba152cd0196cf1143ed3acbd

palkan avatar Dec 23 '22 02:12 palkan

Sorry didn't have the time to work again on this issue, but we might try again in another context we we'll see the result

Tyflomate avatar Feb 16 '23 08:02 Tyflomate

Okay, thanks; closing for now; will re-open if the problem occurs again.

palkan avatar Feb 17 '23 03:02 palkan