mirror of
https://github.com/flarum/framework.git
synced 2025-02-21 08:39:25 +08:00
Use new Policy and User Permission Groups permissions
This commit is contained in:
parent
ab8a3e48b2
commit
7a48da291e
@ -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);
|
||||
});
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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];
|
||||
}
|
||||
}
|
||||
}
|
32
extensions/suspend/src/RevokeAccessFromSuspendedUsers.php
Normal file
32
extensions/suspend/src/RevokeAccessFromSuspendedUsers.php
Normal 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;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user