Реалізація призупинення облікових записів у Laravel

1
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 17 грудня, 2025
Ви коли-небудь замислювались, як ефективно управляти доступом користувачів у вашому веб-додатку? У нашій статті ми розглянемо, як реалізувати постійні та тимчасові призупинки облікових записів у Laravel, використовуючи базу даних, middleware та заплановані задачі. Читайте далі, щоб дізнатися про найкращі практики управління доступом!

Скасування облікового запису — це поширена вимога у веб-додатках, що дозволяє обмежити доступ користувачів як постійно, так і тимчасово. Laravel пропонує гнучкі механізми для реалізації цієї функції за допомогою полів бази даних, проміжного програмного забезпечення та запланованих завдань. У цьому посібнику розглядаються як постійне, так і тимчасове скасування.

# Постійне скасування

Користувач, у якого обліковий запис постійно скасовано, не може отримати доступ до додатку, допоки його обліковий запис не буде вручну відновлений.

# 1. Додайте поле скасування до таблиці Users

Щоб відстежувати, чи користувача скасовано, додайте стовпець suspended_at до таблиці users:

Schema::table('users', function (Blueprint $table) {
    $table->timestamp('suspended_at')->nullable();
});

# 2. Оновіть модель User

Додайте метод у модель User, щоб перевіряти, чи користувач скасований:

class User extends Authenticatable
{
    public function suspended(): bool
    {
        return !is_null($this->suspended_at);
    }
}

# 3. Проміжне програмне забезпечення для обмеження доступу скасованих користувачів

Для блокування доступу скасованим користувачам створіть проміжне програмне забезпечення CheckSuspended:

public function handle(Request $request, Closure $next)
{
    if (auth()->check() && auth()->user()->suspended()) {
        abort(403, 'Ваш обліковий запис скасовано.');
    }

    return $next($request);
}

# 4. Скасування та відновлення користувачів

Реалізуйте методи у контролері для скасування та відновлення користувачів:

public function suspend(User $user)
{
    $user->update(['suspended_at' => Carbon::now()]);

    return response()->json(['message' => 'Користувача успішно скасовано.']);
}

public function unsuspend(User $user)
{
    $user->update(['suspended_at' => null]);

    return response()->json(['message' => 'Користувача успішно відновлено.']);
}

# Тимчасове скасування

Для тимчасових скасувань ми зберігаємо часову мітку suspended_until замість suspended_at, щоб дозволити автоматичне відновлення.

# 1. Модифікуйте таблицю Users

Додайте стовпець suspended_until:

Schema::table('users', function (Blueprint $table) {
    $table->timestamp('suspended_until')->nullable();
});

# 2. Оновіть модель User

Змініть метод suspended(), щоб перевіряти, чи скасування ще активне:

class User extends Authenticatable
{
    public function suspended(): bool
    {
        return !is_null($this->suspended_until) && Carbon::now()->lessThan($this->suspended_until);
    }
}

# 3. Проміжне програмне забезпечення для обмеження доступу скасованих користувачів

Цей код залишається тим же, але тепер перевіряє поле suspended_until:

public function handle(Request $request, Closure $next)
{
    if (auth()->check() && auth()->user()->suspended()) {
        abort(403, 'Ваш обліковий запис скасовано.');
    }

    return $next($request);
}

# 4. Тимчасове скасування та відновлення користувачів

Встановіть майбутню часову мітку для тимчасових скасувань:

public function suspend(User $user)
{
    $user->update(['suspended_until' => Carbon::now()->addDays(7)]);

    return response()->json(['message' => 'Користувача скасовано на 7 днів.']);
}

public function unsuspend(User $user)
{
    $user->update(['suspended_until' => null]);

    return response()->json(['message' => 'Користувача успішно відновлено.']);
}

# 5. Автоматичне відновлення користувачів через планувальник

Оскільки тимчасові скасування закінчуються автоматично, ми можемо використовувати заплановане завдання для зняття закінчених скасувань:

namespace App\Console\Commands;

use App\Models\User;
use Illuminate\Console\Command;
use Illuminate\Support\Carbon;

class SuspendClear extends Command
{
    protected $signature = 'suspend:clear';

    protected $description = 'Автоматично відмінити закінчені скасування';

    public function handle()
    {
        User::whereNotNull('suspended_until')
            ->where('suspended_until', '<=', Carbon::now())
            ->update(['suspended_until' => null]);
    }
}

Додайте команду suspend:clear до планувальника, щоб вона виконувалася щогодини, у файлі routes/console.php:

/**
 * php artisan schedule:work
 */
Schedule::command('suspend:clear')->hourly();

# Висновки

Цей посібник демонструє, як реалізувати постійне та тимчасове скасування облікових записів у Laravel за допомогою:

Дотримуючи ці кроки, ви зможете ефективно управляти доступом користувачів і забезпечити дотримання політик вашого додатку

Популярні

Logomark Logotype

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення

Logomark Logotype

4 поширені помилки Vite у Laravel

Використання Vite для створення фронтенд-ресурсів у вашому додатку Laravel може бути захоплюючим, але іноді ви можете стикнутися з певними помилками. У цій статті ми розглянемо чотири поширені помилки, з якими ви можете зіткнутися, а також підкажемо способи їх усунення, щоб ви могли знову зосередитися на розробці вашого додатку

Logomark Logotype

Оптимізація запитів до бази даних за допомогою скорочених методів Laravel

Laravel пропонує зручні методи для роботи з датами, які значно спрощують запити до бази даних. Досліджуйте, як ці інтуїтивно зрозумілі функції допомагають створювати чіткі та зрозумілі умови для роботи з часовими даними!