public function scopeHiddenDiscussionVisibility(ScopeHiddenDiscussionVisibility $event) { // By default, discussions are not visible to the public if they are // hidden or contain zero comments - unless the actor has a certain // permission. Since we grant permissions per-tag, we will make // discussions visible in the tags for which the user has that // permission. $event->query->orWhereExists(function ($query) use($event) { return $query->select(new Expression(1))->from('discussions_tags')->whereIn('tag_id', Tag::getIdsWhereCan($event->actor, $event->permission))->where('discussions.id', new Expression('discussion_id')); }); }
/** * @param GetPermission $event * @return bool */ public function grantGlobalDiscussionPermissions(GetPermission $event) { if (in_array($event->ability, ['viewDiscussions', 'startDiscussion']) && is_null($event->model)) { return !empty(Tag::getIdsWhereCan($event->actor, $event->ability)); } }
public function scopeEmptyDiscussionVisibility(ScopeEmptyDiscussionVisibility $event) { $event->query->orWhereExists(function ($query) use($event) { return $query->select(new Expression(1))->from('discussions_tags')->whereIn('tag_id', Tag::getIdsWhereCan($event->actor, 'discussion.editPosts'))->where('discussions.id', new Expression('discussion_id')); }); }