Module: ActionPolicy::Behaviours::Namespaced
- Included in:
- Channel, Controller
- Defined in:
- lib/action_policy/behaviours/namespaced.rb
Overview
Adds an ability to lookup policies from current context (namespace):
module Admin
class UsersController < ApplictionController
def index
# uses Admin::UserPolicy if any, otherwise fallbacks to UserPolicy
end
end
end
Modules nesting is also supported:
module Admin
module Client
class UsersController < ApplictionController
def index
# lookup for Admin::Client::UserPolicy -> Admin::UserPolicy -> UserPolicy
end
end
end
end
NOTE: in order to support namespaced lookup for non-inferrable resources, you should specify ‘policy_name` at a class level (instead of `policy_class`, which doesn’t take into account namespaces):
class Guest < User
def self.policy_name
"UserPolicy"
end
end
NOTE: by default, we use class’s name as a policy name; so, for namespaced resources the namespace part is also included:
class Admin
class User
end
end
# search for Admin::UserPolicy, but not for UserPolicy
Admin::User.new
You can access the current authorization namespace through ‘authorization_namespace` method.
You can also define your own namespacing logic by overriding ‘authorization_namespace`:
def
return ::Admin if current_user.admin?
return ::Staff if current_user.staff?
# fallback to current namespace
super
end
Defined Under Namespace
Modules: InstanceMethods
Class Method Summary collapse
- .prepended(base) ⇒ Object (also: included)
Class Method Details
.prepended(base) ⇒ Object Also known as: included
65 66 67 |
# File 'lib/action_policy/behaviours/namespaced.rb', line 65 def prepended(base) base.prepend InstanceMethods end |