首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ACL

Parent:Object

简单的访问控制列表。

访问控制列表由“允许”和“拒绝”两部分组成,以控制访问。使用“全部”或“*”来匹配任何地址。要匹配特定地址,请使用IPAddr可以理解的任何地址或地址掩码。

Example:

代码语言:javascript
复制
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

Constants

ALLOW_DENY

默认允许

DENY_ALLOW

默认为拒绝

VERSION

ACL的当前版本

Public Class Methods

new(list=nil, order = DENY_ALLOW) Show source

list通过评估orderDENY_ALLOW或ALLOW_DENY 创建一个新的ACL 。

一个ACL list是一个“允许”或“拒绝”的数组,以及一个地址或地址掩码或“全部”或“*”来匹配任何地址:

代码语言:javascript
复制
%w[
  deny all
  allow 192.0.2.2
  allow 192.0.2.128/26
]
代码语言:javascript
复制
# File lib/drb/acl.rb, line 172
def initialize(list=nil, order = DENY_ALLOW)
  @order = order
  @deny = ACLList.new
  @allow = ACLList.new
  install_list(list) if list
end

Public Instance Methods

allow_addr?(addr) Show source

允许来自addrinfo的连接addr?它必须格式化为Socket#peeraddr:

代码语言:javascript
复制
["AF_INET", 10, "lc630", "192.0.2.1"]
代码语言:javascript
复制
# File lib/drb/acl.rb, line 196
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) Show source

Allow connections from Socket soc?

代码语言:javascript
复制
# File lib/drb/acl.rb, line 184
def allow_socket?(soc)
  allow_addr?(soc.peeraddr)
end

install_list(list) Show source

listACL条目添加到此ACL。

代码语言:javascript
复制
# File lib/drb/acl.rb, line 216
def install_list(list)
  i = 0
  while i < list.size
    permission, domain = list.slice(i,2)
    case permission.downcase
    when 'allow'
      @allow.add(domain)
    when 'deny'
      @deny.add(domain)
    else
      raise "Invalid ACL entry #{list}"
    end
    i += 2
  end
end

扫码关注腾讯云开发者

领取腾讯云代金券