1
0
mirror of https://github.com/flarum/core.git synced 2025-10-29 06:26:17 +01:00

Model Visibility Scoping Extender and Tests (#2460)

This commit is contained in:
Alexander Skvortsov
2020-12-07 20:02:46 -05:00
committed by GitHub
parent e0437d237a
commit 8901073d12
19 changed files with 527 additions and 145 deletions

View File

@@ -54,6 +54,7 @@ abstract class AbstractPolicy
/**
* @param ScopeModelVisibility $event
* @deprecated beta 15, remove beta 16
*/
public function scopeModelVisibility(ScopeModelVisibility $event)
{

View File

@@ -0,0 +1,31 @@
<?php
/*
* This file is part of Flarum.
*
* For detailed copyright and license information, please view the
* LICENSE file that was distributed with this source code.
*/
namespace Flarum\User\Access;
use Flarum\User\User;
use Illuminate\Database\Eloquent\Builder;
class ScopeUserVisibility
{
/**
* @param User $actor
* @param Builder $query
*/
public function __invoke(User $actor, $query)
{
if ($actor->cannot('viewDiscussions')) {
if ($actor->isGuest()) {
$query->whereRaw('FALSE');
} else {
$query->where('id', $actor->id);
}
}
}
}

View File

@@ -9,8 +9,6 @@
namespace Flarum\User;
use Illuminate\Database\Eloquent\Builder;
class UserPolicy extends AbstractPolicy
{
/**
@@ -29,19 +27,4 @@ class UserPolicy extends AbstractPolicy
return true;
}
}
/**
* @param User $actor
* @param Builder $query
*/
public function find(User $actor, Builder $query)
{
if ($actor->cannot('viewDiscussions')) {
if ($actor->isGuest()) {
$query->whereRaw('FALSE');
} else {
$query->where('id', $actor->id);
}
}
}
}

View File

@@ -12,6 +12,7 @@ namespace Flarum\User;
use Flarum\Foundation\AbstractServiceProvider;
use Flarum\Foundation\ContainerUtil;
use Flarum\Settings\SettingsRepositoryInterface;
use Flarum\User\Access\ScopeUserVisibility;
use Flarum\User\DisplayName\DriverInterface;
use Flarum\User\DisplayName\UsernameDriver;
use Flarum\User\Event\EmailChangeRequested;
@@ -96,5 +97,7 @@ class UserServiceProvider extends AbstractServiceProvider
User::registerPreference('discloseOnline', 'boolval', true);
User::registerPreference('indexProfile', 'boolval', true);
User::registerPreference('locale');
User::registerVisibilityScoper(new ScopeUserVisibility(), 'view');
}
}