2018-10-06 23:10:08 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-04-06 21:06:24 +00:00
|
|
|
module DeclarativePolicy
|
|
|
|
module Cache
|
|
|
|
class << self
|
|
|
|
def user_key(user)
|
|
|
|
return '<anonymous>' if user.nil?
|
2017-11-14 09:02:39 +00:00
|
|
|
|
2017-04-06 21:06:24 +00:00
|
|
|
id_for(user)
|
|
|
|
end
|
|
|
|
|
|
|
|
def policy_key(user, subject)
|
|
|
|
u = user_key(user)
|
|
|
|
s = subject_key(subject)
|
|
|
|
"/dp/policy/#{u}/#{s}"
|
|
|
|
end
|
|
|
|
|
|
|
|
def subject_key(subject)
|
|
|
|
return '<nil>' if subject.nil?
|
|
|
|
return subject.inspect if subject.is_a?(Symbol)
|
2017-11-14 09:02:39 +00:00
|
|
|
|
2017-04-06 21:06:24 +00:00
|
|
|
"#{subject.class.name}:#{id_for(subject)}"
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def id_for(obj)
|
2017-07-17 17:43:55 +00:00
|
|
|
id =
|
|
|
|
begin
|
|
|
|
obj.id
|
|
|
|
rescue NoMethodError
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
|
|
|
|
id || "##{obj.object_id}"
|
2017-04-06 21:06:24 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|