mirror of
https://github.com/flarum/core.git
synced 2025-10-18 18:26:07 +02:00
Policy Extender and Tests (#2461)
Policy application has also been refactored, so that policies return one of `allow`, `deny`, `forceAllow`, `forceDeny`. The result of a set of policies is no longer the first non-null result, but rather the highest priority result (forceDeny > forceAllow > deny > allow, so if a single forceDeny is present, that beats out all other returned results). This removes order in which extensions boot as a factor.
This commit is contained in:
committed by
GitHub
parent
8901073d12
commit
d1dfa758e4
@@ -7,38 +7,28 @@
|
||||
* LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Flarum\Discussion;
|
||||
namespace Flarum\Discussion\Access;
|
||||
|
||||
use Flarum\Discussion\Discussion;
|
||||
use Flarum\Settings\SettingsRepositoryInterface;
|
||||
use Flarum\User\AbstractPolicy;
|
||||
use Flarum\User\Access\AbstractPolicy;
|
||||
use Flarum\User\User;
|
||||
use Illuminate\Contracts\Events\Dispatcher;
|
||||
|
||||
class DiscussionPolicy extends AbstractPolicy
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected $model = Discussion::class;
|
||||
|
||||
/**
|
||||
* @var SettingsRepositoryInterface
|
||||
*/
|
||||
protected $settings;
|
||||
|
||||
/**
|
||||
* @var Dispatcher
|
||||
*/
|
||||
protected $events;
|
||||
|
||||
/**
|
||||
* @param SettingsRepositoryInterface $settings
|
||||
* @param Dispatcher $events
|
||||
*/
|
||||
public function __construct(SettingsRepositoryInterface $settings, Dispatcher $events)
|
||||
public function __construct(SettingsRepositoryInterface $settings)
|
||||
{
|
||||
$this->settings = $settings;
|
||||
$this->events = $events;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -49,7 +39,7 @@ class DiscussionPolicy extends AbstractPolicy
|
||||
public function can(User $actor, $ability)
|
||||
{
|
||||
if ($actor->hasPermission('discussion.'.$ability)) {
|
||||
return true;
|
||||
return $this->allow();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,7 +56,7 @@ class DiscussionPolicy extends AbstractPolicy
|
||||
if ($allowRenaming === '-1'
|
||||
|| ($allowRenaming === 'reply' && $discussion->participant_count <= 1)
|
||||
|| ($discussion->created_at->diffInMinutes() < $allowRenaming)) {
|
||||
return true;
|
||||
return $this->allow();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -83,7 +73,7 @@ class DiscussionPolicy extends AbstractPolicy
|
||||
&& (! $discussion->hidden_at || $discussion->hidden_user_id == $actor->id)
|
||||
&& $actor->can('reply', $discussion)
|
||||
) {
|
||||
return true;
|
||||
return $this->allow();
|
||||
}
|
||||
}
|
||||
}
|
@@ -23,7 +23,6 @@ class DiscussionServiceProvider extends AbstractServiceProvider
|
||||
$events = $this->app->make('events');
|
||||
|
||||
$events->subscribe(DiscussionMetadataUpdater::class);
|
||||
$events->subscribe(DiscussionPolicy::class);
|
||||
|
||||
$events->listen(
|
||||
Renamed::class,
|
||||
|
Reference in New Issue
Block a user