From 7a48da291e887a5d4cc56196b1710302e00345c6 Mon Sep 17 00:00:00 2001 From: Alexander Skvortsov Date: Tue, 8 Dec 2020 14:02:06 -0500 Subject: [PATCH] Use new Policy and User Permission Groups permissions --- extensions/suspend/extend.php | 24 +++++++----- extensions/suspend/src/Access/UserPolicy.php | 9 +---- .../RevokeAccessFromSuspendedUsers.php | 38 ------------------- .../src/RevokeAccessFromSuspendedUsers.php | 32 ++++++++++++++++ 4 files changed, 48 insertions(+), 55 deletions(-) delete mode 100755 extensions/suspend/src/Listener/RevokeAccessFromSuspendedUsers.php create mode 100644 extensions/suspend/src/RevokeAccessFromSuspendedUsers.php diff --git a/extensions/suspend/extend.php b/extensions/suspend/extend.php index 027417fbf..44abfb231 100644 --- a/extensions/suspend/extend.php +++ b/extensions/suspend/extend.php @@ -11,13 +11,14 @@ use Flarum\Api\Serializer\BasicUserSerializer; use Flarum\Api\Serializer\UserSerializer; use Flarum\Event\ConfigureUserGambits; use Flarum\Extend; -use Flarum\Suspend\Access; +use Flarum\Suspend\Access\UserPolicy; use Flarum\Suspend\AddUserSuspendAttributes; use Flarum\Suspend\Event\Suspended; use Flarum\Suspend\Event\Unsuspended; use Flarum\Suspend\Listener; use Flarum\Suspend\Notification\UserSuspendedBlueprint; use Flarum\Suspend\Notification\UserUnsuspendedBlueprint; +use Flarum\Suspend\RevokeAccessFromSuspendedUsers; use Flarum\Suspend\Search\Gambit\SuspendedGambit; use Flarum\User\Event\Saving; use Flarum\User\User; @@ -44,16 +45,19 @@ return [ ->type(UserSuspendedBlueprint::class, BasicUserSerializer::class, ['alert', 'email']) ->type(UserUnsuspendedBlueprint::class, BasicUserSerializer::class, ['alert', 'email']), + (new Extend\Event()) + ->listen(Saving::class, Listener\SaveSuspensionToDatabase::class) + ->listen(Suspended::class, Listener\SendNotificationWhenUserIsSuspended::class) + ->listen(Unsuspended::class, Listener\SendNotificationWhenUserIsUnsuspended::class), + + (new Extend\Policy()) + ->modelPolicy(User::class, UserPolicy::class), + + (new Extend\User()) + ->permissionGroups(RevokeAccessFromSuspendedUsers::class), + + function (Dispatcher $events) { - $events->subscribe(Listener\RevokeAccessFromSuspendedUsers::class); - - $events->listen(Saving::class, Listener\SaveSuspensionToDatabase::class); - - $events->listen(Suspended::class, Listener\SendNotificationWhenUserIsSuspended::class); - $events->listen(Unsuspended::class, Listener\SendNotificationWhenUserIsUnsuspended::class); - - $events->subscribe(Access\UserPolicy::class); - $events->listen(ConfigureUserGambits::class, function (ConfigureUserGambits $event) { $event->gambits->add(SuspendedGambit::class); }); diff --git a/extensions/suspend/src/Access/UserPolicy.php b/extensions/suspend/src/Access/UserPolicy.php index 8fa583740..69823772c 100644 --- a/extensions/suspend/src/Access/UserPolicy.php +++ b/extensions/suspend/src/Access/UserPolicy.php @@ -9,16 +9,11 @@ namespace Flarum\Suspend\Access; -use Flarum\User\AbstractPolicy; +use Flarum\User\Access\AbstractPolicy; use Flarum\User\User; class UserPolicy extends AbstractPolicy { - /** - * {@inheritdoc} - */ - protected $model = User::class; - /** * @param User $actor * @param User $user @@ -27,7 +22,7 @@ class UserPolicy extends AbstractPolicy public function suspend(User $actor, User $user) { if ($user->isAdmin() || $user->id === $actor->id) { - return false; + return $this->deny(); } } } diff --git a/extensions/suspend/src/Listener/RevokeAccessFromSuspendedUsers.php b/extensions/suspend/src/Listener/RevokeAccessFromSuspendedUsers.php deleted file mode 100755 index a8a2b304d..000000000 --- a/extensions/suspend/src/Listener/RevokeAccessFromSuspendedUsers.php +++ /dev/null @@ -1,38 +0,0 @@ -listen(PrepareUserGroups::class, [$this, 'prepareUserGroups']); - } - - /** - * @param PrepareUserGroups $event - */ - public function prepareUserGroups(PrepareUserGroups $event) - { - $suspendedUntil = $event->user->suspended_until; - - if ($suspendedUntil && $suspendedUntil->gt(Carbon::now())) { - $event->groupIds = [Group::GUEST_ID]; - } - } -} diff --git a/extensions/suspend/src/RevokeAccessFromSuspendedUsers.php b/extensions/suspend/src/RevokeAccessFromSuspendedUsers.php new file mode 100644 index 000000000..d6a7b3f47 --- /dev/null +++ b/extensions/suspend/src/RevokeAccessFromSuspendedUsers.php @@ -0,0 +1,32 @@ +suspended_until; + + if ($suspendedUntil && $suspendedUntil->gt(Carbon::now())) { + return [Group::GUEST_ID]; + } + + return $groupIds; + } +}