56: def is_forbidden_and_why?(name, args = {})
57: res = :nomatch
58: right = @rights.find do |acl|
59: found = false
60:
61:
62:
63: if match = acl.match?(name)
64: args[:match] = match
65: if (res = acl.allowed?(args[:node], args[:ip], args)) != :dunno
66:
67: return nil if res
68:
69: found = true
70: end
71: end
72: found
73: end
74:
75:
76:
77: if name =~ /^\// or right
78:
79: msg = "#{(args[:node].nil? ? args[:ip] : "#{args[:node]}(#{args[:ip]})")} access to #{name} [#{args[:method]}]"
80:
81: msg += " authenticated " if args[:authenticated]
82:
83: error = AuthorizationError.new("Forbidden request: #{msg}")
84: if right
85: error.file = right.file
86: error.line = right.line
87: end
88: else
89:
90:
91: raise ArgumentError, "Unknown namespace right '#{name}'"
92: end
93: error
94: end