1
0
mirror of https://github.com/flarum/core.git synced 2025-07-29 12:40:40 +02:00

Add suspend permission; don't let admins be suspended

This commit is contained in:
Toby Zerner
2015-08-05 16:22:30 +09:30
parent 8c897ceb72
commit 9f0e574f20
2 changed files with 19 additions and 1 deletions

View File

@@ -1,6 +1,12 @@
import { extend } from 'flarum/extend'; import { extend } from 'flarum/extend';
import app from 'flarum/app'; import app from 'flarum/app';
import PermissionGrid from 'flarum/components/PermissionGrid';
app.initializers.add('suspend', () => { app.initializers.add('suspend', () => {
// TODO extend(PermissionGrid.prototype, 'moderateItems', items => {
items.add('suspendUsers', {
label: 'Suspend users',
permission: 'user.suspend'
});
});
}); });

View File

@@ -1,7 +1,9 @@
<?php namespace Flarum\Suspend\Listeners; <?php namespace Flarum\Suspend\Listeners;
use Flarum\Events\UserWillBeSaved; use Flarum\Events\UserWillBeSaved;
use Flarum\Events\ModelAllow;
use Flarum\Events\GetUserGroups; use Flarum\Events\GetUserGroups;
use Flarum\Core\Users\User;
use Flarum\Core\Groups\Group; use Flarum\Core\Groups\Group;
use Carbon\Carbon; use Carbon\Carbon;
@@ -10,6 +12,7 @@ class PersistData
public function subscribe($events) public function subscribe($events)
{ {
$events->listen(UserWillBeSaved::class, [$this, 'whenUserWillBeSaved']); $events->listen(UserWillBeSaved::class, [$this, 'whenUserWillBeSaved']);
$events->listen(ModelAllow::class, [$this, 'disallowAdminSuspension']);
$events->listen(GetUserGroups::class, [$this, 'revokePermissions']); $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) public function revokePermissions(GetUserGroups $event)
{ {
$suspendUntil = $event->user->suspend_until; $suspendUntil = $event->user->suspend_until;