module Chef::Knife::AclBase

def add_to_acl!(member_type, member_name, object_type, object_name, perms)

def add_to_acl!(member_type, member_name, object_type, object_name, perms)
  acl = get_acl(object_type, object_name)
  perms.split(",").each do |perm|
    ui.msg "Adding '#{member_name}' to '#{perm}' ACE of '#{object_name}'"
    ace = acl[perm]
    case member_type
    when "client", "user"
      # Our PUT body depends on the type of reply we get from _acl?detail=granular

      # When the server replies with json attributes  'users' and 'clients',

      # we'll want to modify entries under the same keys they arrived.- their presence

      # in the body tells us that CS will accept them in a PUT.

      # Older version of chef-server will continue to use 'actors' for a combined list

      # and expect the same in the body.

      key = "#{member_type}s"
      key = "actors" unless ace.key? key
      next if ace[key].include?(member_name)
      ace[key] << member_name
    when "group"
      next if ace["groups"].include?(member_name)
      ace["groups"] << member_name
    end
    update_ace!(object_type, object_name, perm, ace)
  end
end