improve permissions

This commit is contained in:
Daniel Klabbers 2021-10-14 00:07:08 +02:00
parent 453c67620d
commit e3d436d5dd
1 changed files with 23 additions and 5 deletions

View File

@ -5,6 +5,7 @@ namespace Blomstra\Search\Api\Controllers;
use Blomstra\Search\Schemas\Schema; use Blomstra\Search\Schemas\Schema;
use Flarum\Api\Controller\AbstractListController; use Flarum\Api\Controller\AbstractListController;
use Flarum\Extension\ExtensionManager; use Flarum\Extension\ExtensionManager;
use Flarum\Group\Group;
use Flarum\Http\RequestUtil; use Flarum\Http\RequestUtil;
use Flarum\User\User; use Flarum\User\User;
use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\Container\Container;
@ -62,13 +63,30 @@ class SearchController extends AbstractListController
return $manager->isEnabled($extension); return $manager->isEnabled($extension);
} }
protected function getFilters(User $actor): array protected function getFilters(User $actor): string
{ {
$filters = []; /** @var Collection $groups */
$groups = $actor->groups->pluck('id');
$filters = array_merge($filters, $actor->groups->pluck('id')->map(function(int $id) { $groups->add(Group::GUEST_ID);
return ["groups = $id"];
})->toArray()); if ($actor->is_email_confirmed) $groups->add(Group::MEMBER_ID);
$filters = sprintf(
'(%s)',
join(' OR ', $groups->map(function(int $id) {
return "groups = $id";
})->toArray())
);
if ($this->extensionEnabled('fof-byobu')) {
$filters .= sprintf(
" OR (private = true AND (recipient-users = $actor->id OR %s))",
join(' OR ', $groups->map(function(int $id) {
return "recipient-groups = $id";
})->toArray())
);
}
return $filters; return $filters;
} }