lib/ddr/auth/ability_factory.rb in ddr-models-2.11.0 vs lib/ddr/auth/ability_factory.rb in ddr-models-3.0.0.alpha.1
- old
+ new
@@ -1,10 +1,33 @@
module Ddr::Auth
class AbilityFactory
+ private_class_method :new
+
def self.call(user = nil, env = nil)
- auth_context = AuthContextFactory.call(user, env)
- auth_context.ability
+ new(user, env).call
+ end
+
+ attr_reader :auth_context
+
+ delegate :anonymous?, :superuser?, to: :auth_context
+
+ def initialize(user, env)
+ @auth_context = AuthContextFactory.call(user, env)
+ end
+
+ def call
+ if anonymous?
+ AnonymousAbility.new(auth_context)
+ elsif superuser?
+ SuperuserAbility.new(auth_context)
+ else
+ default_ability.new(auth_context)
+ end
+ end
+
+ def default_ability
+ Ddr::Auth::default_ability.constantize
end
end
end