    public function checkIfAuthorised($user, $id)
    {
        if (!isset($user['id'])) {
            throw new MethodNotAllowedException('Invalid user.');
        }
        $this->id = $id;
        if (!$this->exists()) {
            return false;
        }
        $thread = $this->find('first', array(
            'conditions' => array('id' => $id),
            'recursive' => -1
        ));
        if (!empty($thread['Thread']['event_id'])) {
            $event = $this->Event->fetchEvent($user, array(
                'eventid' => $thread['Thread']['event_id'],
                'metadata' => true
            ));
            if (empty($event)) {
                return false;
            }
            $event = $event[0];
            // update the distribution if it diverged from the event
            if (
                $event['Event']['distribution'] != $thread['Thread']['distribution'] ||
                $event['Event']['sharing_group_id'] != $thread['Thread']['sharing_group_id']
            ) {
                $this->Behaviors->unload('SysLogLogable.SysLogLogable');
                $thread['Thread']['distribution'] = $event['Event']['distribution'];
                $thread['Thread']['sharing_group_id'] = $event['Event']['sharing_group_id'];
                $this->save($thread);
            }
            return !empty($event);
        }
        if ($user['Role']['perm_site_admin']) {
            return true;
        }
        if ($thread['Thread']['org_id'] == $user['org_id'] || ($thread['Thread']['distribution'] > 0 && $thread['Thread']['distribution'] < 4)) {
            return true;
        }
        if ($thread['Thread']['distribution'] == 4 && $this->SharingGroup->checkIfAuthorised($user, $thread['Thread']['sharing_group_id'])) {
            return true;
        }
        return false;
    }