protected function _authorizeFollower(AnCommandContext $context)
    {
        //viewer can only follow actor if and only if viewer is leadable and actor is followable
        if ($this->_entity->isFollowable() && !$this->_viewer->isLeadable()) {
            return false;
        }

        if ($this->_viewer->eql($this->_entity)) {
            return false;
        }

        if (is_guest($this->_viewer)) {
            return false;
        }

        if (! $this->_entity->authorize('access', $context)) {

            if ($this->_entity->isLeadable() && $this->_entity->following($this->_viewer)) {
                return true;
            } else {
                return false;
            }
        }

        //if the viewer is blocking the entity, then it can not follow the entity
        if ($this->_viewer->isFollowable() && $this->_viewer->blocking($this->_entity)) {
            return false;
        }

        return true;
    }