anchor.diff:  
   handle(Packet = ?PUBLISH_PACKET(?QOS_1, Topic, PacketId, _Payload),
            State = #proto_state{clientid = ClientId, session = Session}) ->
  -    case emqttd_access_control:check_acl(client(State), publish, Topic) of
  +    case check_acl(publish, Topic, State) of
           allow -> 
               emqttd_session:publish(Session, ClientId, {?QOS_1, emqtt_message:from_packet(Packet)}),
               send(?PUBACK_PACKET(?PUBACK, PacketId), State);
  
positive.code: 
  handle(Packet = ?PUBLISH_PACKET(?QOS_2, Topic, PacketId, _Payload),
           State = #proto_state{clientid = ClientId, session = Session}) ->
      case emqttd_access_control:check_acl(client(State), publish, Topic) of
          allow -> 
              NewSession = emqttd_session:publish(Session, ClientId, {?QOS_2, emqtt_message:from_packet(Packet)}),
              send(?PUBACK_PACKET(?PUBREC, PacketId), State#proto_state{session = NewSession});
  
negative.code: 	{ok, NewState};
  
  handle(?SUBSCRIBE_PACKET(PacketId, TopicTable), State = #proto_state{clientid = ClientId, session = Session}) ->
      AllowDenies = [check_acl(subscribe, Topic, State) || {Topic, _Qos} <- TopicTable],
      case lists:member(deny, AllowDenies) of
          true ->
              %%TODO: return 128 QoS when deny...
  