class StoreAgent::Node::Permission
オブジェクトの権限情報
Public Instance Methods
allow?(permission_name)
click to toggle source
オブジェクトに対して、引数で受け取った権限を持つなら true を返す
# File lib/store_agent/node/attachment/permission.rb, line 22 def allow?(permission_name) case when current_user.super_user? true when !(permission_value = get_permission_value(permission_name)).nil? permission_value else !!data["guest"][permission_name] end end
file_path()
click to toggle source
オブジェクトの権限情報を保存しているファイルの絶対パス
# File lib/store_agent/node/attachment/permission.rb, line 64 def file_path "#{base_path}#{StoreAgent.config.permission_extension}" end
set!(identifier: nil, permission_values: {})
click to toggle source
権限を設定する
# File lib/store_agent/node/attachment/permission.rb, line 34 def set!(identifier: nil, permission_values: {}) return if permission_values.empty? user_permission = [identifier].flatten.inject(data["users"]) do |r, id| r[id] ||= {} end permission_values.each do |permission_name, value| user_permission[permission_name] = value end save end
unset!(identifier: nil, permission_names: [])
click to toggle source
権限を解除する
# File lib/store_agent/node/attachment/permission.rb, line 46 def unset!(identifier: nil, permission_names: []) identifiers = [identifier].flatten permission_names = [permission_names].flatten user_permission = find_permission(data["users"], identifiers) if user_permission user_permission.delete_if do |permission_name, _| permission_names.include?(permission_name) end sweep_permission(data["users"], identifiers) save end end
Private Instance Methods
find_permission(data, identifiers)
click to toggle source
# File lib/store_agent/node/attachment/permission.rb, line 70 def find_permission(data, identifiers) identifier = identifiers.first next_data = data[identifier] next_identifiers = identifiers[1..-1] case when next_identifiers.empty? next_data when next_data find_permission(next_data, next_identifiers) else nil end end
get_permission_value(permission_name)
click to toggle source
# File lib/store_agent/node/attachment/permission.rb, line 95 def get_permission_value(permission_name) current_user.identifiers.reverse.each do |identifier| user_permission = [identifier].flatten.inject(data["users"]) do |r, id| r[id] || break end if user_permission && user_permission.key?(permission_name) return user_permission[permission_name] end end nil end
initial_data()
click to toggle source
# File lib/store_agent/node/attachment/permission.rb, line 107 def initial_data user_permission = {} if !(current_user.super_user? || current_user.guest?) user_permission = current_user.identifier_array.reverse.inject(@object.initial_permission) do |r, id| {id => r} end end { "users" => user_permission, "guest" => StoreAgent.config.default_guest_permission } end
sweep_permission(data, identifiers)
click to toggle source
# File lib/store_agent/node/attachment/permission.rb, line 84 def sweep_permission(data, identifiers) identifier = identifiers.first next_data = data[identifier] if next_data sweep_permission(next_data, identifiers[1..-1]) if next_data.empty? data.delete(identifier) end end end