mirror of
https://github.com/flarum/core.git
synced 2025-08-01 06:00:24 +02:00
Use new Policy and User Permission Groups permissions
This commit is contained in:
@@ -11,13 +11,14 @@ use Flarum\Api\Serializer\BasicUserSerializer;
|
|||||||
use Flarum\Api\Serializer\UserSerializer;
|
use Flarum\Api\Serializer\UserSerializer;
|
||||||
use Flarum\Event\ConfigureUserGambits;
|
use Flarum\Event\ConfigureUserGambits;
|
||||||
use Flarum\Extend;
|
use Flarum\Extend;
|
||||||
use Flarum\Suspend\Access;
|
use Flarum\Suspend\Access\UserPolicy;
|
||||||
use Flarum\Suspend\AddUserSuspendAttributes;
|
use Flarum\Suspend\AddUserSuspendAttributes;
|
||||||
use Flarum\Suspend\Event\Suspended;
|
use Flarum\Suspend\Event\Suspended;
|
||||||
use Flarum\Suspend\Event\Unsuspended;
|
use Flarum\Suspend\Event\Unsuspended;
|
||||||
use Flarum\Suspend\Listener;
|
use Flarum\Suspend\Listener;
|
||||||
use Flarum\Suspend\Notification\UserSuspendedBlueprint;
|
use Flarum\Suspend\Notification\UserSuspendedBlueprint;
|
||||||
use Flarum\Suspend\Notification\UserUnsuspendedBlueprint;
|
use Flarum\Suspend\Notification\UserUnsuspendedBlueprint;
|
||||||
|
use Flarum\Suspend\RevokeAccessFromSuspendedUsers;
|
||||||
use Flarum\Suspend\Search\Gambit\SuspendedGambit;
|
use Flarum\Suspend\Search\Gambit\SuspendedGambit;
|
||||||
use Flarum\User\Event\Saving;
|
use Flarum\User\Event\Saving;
|
||||||
use Flarum\User\User;
|
use Flarum\User\User;
|
||||||
@@ -44,16 +45,19 @@ return [
|
|||||||
->type(UserSuspendedBlueprint::class, BasicUserSerializer::class, ['alert', 'email'])
|
->type(UserSuspendedBlueprint::class, BasicUserSerializer::class, ['alert', 'email'])
|
||||||
->type(UserUnsuspendedBlueprint::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) {
|
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) {
|
$events->listen(ConfigureUserGambits::class, function (ConfigureUserGambits $event) {
|
||||||
$event->gambits->add(SuspendedGambit::class);
|
$event->gambits->add(SuspendedGambit::class);
|
||||||
});
|
});
|
||||||
|
@@ -9,16 +9,11 @@
|
|||||||
|
|
||||||
namespace Flarum\Suspend\Access;
|
namespace Flarum\Suspend\Access;
|
||||||
|
|
||||||
use Flarum\User\AbstractPolicy;
|
use Flarum\User\Access\AbstractPolicy;
|
||||||
use Flarum\User\User;
|
use Flarum\User\User;
|
||||||
|
|
||||||
class UserPolicy extends AbstractPolicy
|
class UserPolicy extends AbstractPolicy
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
protected $model = User::class;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param User $actor
|
* @param User $actor
|
||||||
* @param User $user
|
* @param User $user
|
||||||
@@ -27,7 +22,7 @@ class UserPolicy extends AbstractPolicy
|
|||||||
public function suspend(User $actor, User $user)
|
public function suspend(User $actor, User $user)
|
||||||
{
|
{
|
||||||
if ($user->isAdmin() || $user->id === $actor->id) {
|
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;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user