1
0
mirror of https://github.com/flarum/core.git synced 2025-08-22 16:14:00 +02:00

Update for visibility scoping API changes in core

This commit is contained in:
Toby Zerner
2018-01-11 12:35:59 +10:30
parent 60845eeee7
commit 77d33c8604

View File

@@ -13,14 +13,11 @@ namespace Flarum\Tags\Access;
use Carbon\Carbon; use Carbon\Carbon;
use Flarum\Discussion\Discussion; use Flarum\Discussion\Discussion;
use Flarum\Event\ScopeHiddenDiscussionVisibility;
use Flarum\Settings\SettingsRepositoryInterface; use Flarum\Settings\SettingsRepositoryInterface;
use Flarum\Tags\Tag; use Flarum\Tags\Tag;
use Flarum\User\AbstractPolicy; use Flarum\User\AbstractPolicy;
use Flarum\User\User; use Flarum\User\User;
use Illuminate\Contracts\Events\Dispatcher;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Query\Expression;
class DiscussionPolicy extends AbstractPolicy class DiscussionPolicy extends AbstractPolicy
{ {
@@ -42,16 +39,6 @@ class DiscussionPolicy extends AbstractPolicy
$this->settings = $settings; $this->settings = $settings;
} }
/**
* {@inheritdoc}
*/
public function subscribe(Dispatcher $events)
{
parent::subscribe($events);
$events->listen(ScopeHiddenDiscussionVisibility::class, [$this, 'scopeHiddenDiscussionVisibility']);
}
/** /**
* @param User $actor * @param User $actor
* @param string $ability * @param string $ability
@@ -106,20 +93,20 @@ class DiscussionPolicy extends AbstractPolicy
} }
/** /**
* @param ScopeHiddenDiscussionVisibility $event * @param User $actor
* @param Builder $query
* @param string $ability
*/ */
public function scopeHiddenDiscussionVisibility(ScopeHiddenDiscussionVisibility $event) public function findWithPermission(User $actor, Builder $query, $ability)
{ {
// By default, discussions are not visible to the public if they are // If a discussion requires a certain permission in order for it to be
// hidden or contain zero comments - unless the actor has a certain // visible, then we can check if the user has been granted that
// permission. Since we grant permissions per-tag, we will make // permission for any of the discussion's tags.
// discussions visible in the tags for which the user has that $query->whereExists(function ($query) use ($actor, $ability) {
// permission. return $query->selectRaw('1')
$event->query->orWhereExists(function ($query) use ($event) {
return $query->select(new Expression(1))
->from('discussions_tags') ->from('discussions_tags')
->whereIn('tag_id', Tag::getIdsWhereCan($event->actor, $event->permission)) ->whereIn('tag_id', Tag::getIdsWhereCan($actor, 'discussion.'.$ability))
->where('discussions.id', new Expression('discussion_id')); ->whereRaw('discussions.id = discussion_id');
}); });
} }