Use new Policy and User Permission Groups permissions

This commit is contained in:
Alexander Skvortsov 2020-12-08 14:02:06 -05:00
parent ab8a3e48b2
commit 7a48da291e
4 changed files with 48 additions and 55 deletions

View File

@ -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);
});

View File

@ -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();
}
}
}

View File

@ -1,38 +0,0 @@
<?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\Suspend\Listener;
use Carbon\Carbon;
use Flarum\Event\PrepareUserGroups;
use Flarum\Group\Group;
use Illuminate\Contracts\Events\Dispatcher;
class RevokeAccessFromSuspendedUsers
{
/**
* @param Dispatcher $events
*/
public function subscribe(Dispatcher $events)
{
$events->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];
}
}
}

View File

@ -0,0 +1,32 @@
<?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\Suspend;
use Carbon\Carbon;
use Flarum\Group\Group;
use Flarum\User\User;
class RevokeAccessFromSuspendedUsers
{
/**
* @param User $user
* @param array $groupIds
*/
public function __invoke(User $user, array $groupIds)
{
$suspendedUntil = $user->suspended_until;
if ($suspendedUntil && $suspendedUntil->gt(Carbon::now())) {
return [Group::GUEST_ID];
}
return $groupIds;
}
}