@Override
    public boolean canPublish(Node node, JID entity) {
        NodeAffiliate nodeAffiliate = node.getAffiliate(entity);
        // Deny access if user does not have any relation with the node or is an outcast
        if (nodeAffiliate == null ||
                nodeAffiliate.getAffiliation() == NodeAffiliate.Affiliation.outcast) {
            return false;
        }
        // Grant access if user is an owner of publisher
        if (nodeAffiliate.getAffiliation() == NodeAffiliate.Affiliation.publisher ||
                nodeAffiliate.getAffiliation() == NodeAffiliate.Affiliation.owner) {
            return true;
        }
        // Grant access if at least one subscription of this user was approved
        for (NodeSubscription subscription : nodeAffiliate.getSubscriptions()) {
            if (subscription.isActive()) {
                return true;
            }
        }
        return false;
    }
Subscribers, publishers and owners may publish items to the node.

@author Matt Tucker
xmppserver/src/main/java/org/jivesoftware/openfire/pubsub/models/OnlySubscribers.java