ACL 类
简单的访问控制列表。
访问控制列表由“允许”和“拒绝”两部分组成,用于控制访问。使用“all”或“*”匹配任何地址。要匹配特定地址,请使用 IPAddr
可以理解的任何地址或地址掩码。
示例
list = %w[ deny all allow 192.168.1.1 allow ::ffff:192.168.1.2 allow 192.168.1.3 ] # From Socket#peeraddr, see also ACL#allow_socket? addr = ["AF_INET", 10, "lc630", "192.168.1.3"] acl = ACL.new p acl.allow_addr?(addr) # => true acl = ACL.new(list, ACL::DENY_ALLOW) p acl.allow_addr?(addr) # => true
常量
- ALLOW_DENY
默认为允许
- DENY_ALLOW
默认为拒绝
- VERSION
ACL
的当前版本
公共类方法
new(list=nil, order = DENY_ALLOW) 点击切换源
使用 list
和 DENY_ALLOW
或 ALLOW_DENY
的评估 order
创建新的 ACL
。
ACL
list
是一个“允许”或“拒绝”的 Array
,以及一个地址或地址掩码,或“all”或“*”以匹配任何地址
%w[
deny all
allow 192.0.2.2
allow 192.0.2.128/26
]
# File lib/drb/acl.rb, line 179 def initialize(list=nil, order = DENY_ALLOW) @order = order @deny = ACLList.new @allow = ACLList.new install_list(list) if list end
公共实例方法
allow_addr?(addr) 点击切换源
允许来自 addrinfo addr
的连接吗?它必须格式化为 Socket#peeraddr
["AF_INET", 10, "lc630", "192.0.2.1"]
# File lib/drb/acl.rb, line 203 def allow_addr?(addr) case @order when DENY_ALLOW return true if @allow.match(addr) return false if @deny.match(addr) return true when ALLOW_DENY return false if @deny.match(addr) return true if @allow.match(addr) return false else false end end
allow_socket?(soc) 点击切换源
允许来自 Socket
soc
的连接吗?
# File lib/drb/acl.rb, line 191 def allow_socket?(soc) allow_addr?(soc.peeraddr) end
install_list(list) 点击切换源