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:
@@ -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');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user