diff --git a/extensions/suspend/js/admin/src/main.js b/extensions/suspend/js/admin/src/main.js index 4541e65e9..af6065793 100644 --- a/extensions/suspend/js/admin/src/main.js +++ b/extensions/suspend/js/admin/src/main.js @@ -1,6 +1,12 @@ import { extend } from 'flarum/extend'; import app from 'flarum/app'; +import PermissionGrid from 'flarum/components/PermissionGrid'; app.initializers.add('suspend', () => { - // TODO + extend(PermissionGrid.prototype, 'moderateItems', items => { + items.add('suspendUsers', { + label: 'Suspend users', + permission: 'user.suspend' + }); + }); }); diff --git a/extensions/suspend/src/Listeners/PersistData.php b/extensions/suspend/src/Listeners/PersistData.php index 2acb059ef..d50f5bea7 100755 --- a/extensions/suspend/src/Listeners/PersistData.php +++ b/extensions/suspend/src/Listeners/PersistData.php @@ -1,7 +1,9 @@ listen(UserWillBeSaved::class, [$this, 'whenUserWillBeSaved']); + $events->listen(ModelAllow::class, [$this, 'disallowAdminSuspension']); $events->listen(GetUserGroups::class, [$this, 'revokePermissions']); } @@ -28,6 +31,15 @@ class PersistData } } + public function disallowAdminSuspension(ModelAllow $event) + { + if ($event->model instanceof User && $event->action === 'suspend') { + if ($event->model->isAdmin() || $event->model->id === $event->actor->id) { + return false; + } + } + } + public function revokePermissions(GetUserGroups $event) { $suspendUntil = $event->user->suspend_until;