Browse Source

用户软删除&修改用户状态&登录用户状态校验

langshiyeye 11 months ago
parent
commit
4d0ad8962e

+ 5 - 0
app/Http/Controllers/API/AuthController.php

@@ -25,6 +25,11 @@ class AuthController extends Controller
                 'username' => [__("auth.failed")],
             ]);
         }
+        if ($user->status===0){
+            throw ValidationException::withMessages([
+                'username' => [__("auth.ban")],
+            ]);
+        }
 
         return $this->success([
             'data' => [

+ 17 - 0
app/Http/Controllers/API/UserController.php

@@ -88,6 +88,23 @@ class UserController extends Controller
 //        TODO:发送邮箱给目标用户
         return $this->created();
     }
+
+    /**
+     * enable or ban users 启用或禁用用户
+     * @param Request $request
+     * @return \Illuminate\Http\Response
+     */
+    public function status(Request $request,string $status){
+        //只能删除自己公司的;超管除外
+        if (Auth::user()->super_admin){
+            User::whereIn('id', $request->user_id)->update(['status' => $status]);
+        }
+        else{
+            User::whereIn('id', $request->user_id)->where('company_id',Auth::user()->company_id)->update(['status' => $status]);
+        }
+        return $this->created();
+    }
+
     public function destroy(string $id)
     {
 

+ 2 - 1
app/Models/User.php

@@ -6,6 +6,7 @@ namespace App\Models;
 use App\Models\Scopes\CompanyScope;
 use Illuminate\Database\Eloquent\Casts\Attribute;
 use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\SoftDeletes;
 use Illuminate\Foundation\Auth\User as Authenticatable;
 use Illuminate\Notifications\Notifiable;
 use Laravel\Sanctum\HasApiTokens;
@@ -13,7 +14,7 @@ use Spatie\Permission\Traits\HasRoles;
 
 class User extends Authenticatable
 {
-    use HasApiTokens, HasFactory, Notifiable, HasRoles;
+    use HasApiTokens, HasFactory, Notifiable, HasRoles, SoftDeletes;
 
     protected string $guard_name = 'api';
 

+ 28 - 0
database/migrations/2024_04_12_161932_add_soft_deletes_and_isenabled_to_users_table.php

@@ -0,0 +1,28 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::table('users', function (Blueprint $table) {
+            $table->softDeletes()->after('updated_at');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::table('users', function (Blueprint $table) {
+            $table->dropColumn('deleted_at');
+        });
+    }
+};

+ 1 - 0
lang/ar/auth.php

@@ -6,4 +6,5 @@ return [
     'failed'   => 'بيانات الاعتماد هذه غير متطابقة مع البيانات المسجلة لدينا.',
     'password' => 'كلمة المرور غير صحيحة.',
     'throttle' => 'عدد كبير جدا من محاولات الدخول. يرجى المحاولة مرة أخرى بعد :seconds ثانية.',
+    'ban' => 'المستخدم الحالي قد تم حظره من الدخول',
 ];

+ 1 - 0
lang/en/auth.php

@@ -6,4 +6,5 @@ return [
     'failed'   => 'These credentials do not match our records.',
     'password' => 'The password is incorrect.',
     'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
+    'ban' => 'The current user has been blocked from logging in.',
 ];

+ 1 - 0
lang/zh_CN/auth.php

@@ -6,4 +6,5 @@ return [
     'failed'   => '用户名或密码错误。',
     'password' => '密码错误',
     'throttle' => '您尝试的登录次数过多,请 :seconds 秒后再试。',
+    'ban' => '当前用户已被禁止登录。',
 ];

+ 1 - 0
lang/zh_TW/auth.php

@@ -6,4 +6,5 @@ return [
     'failed'   => '使用者名稱或密碼錯誤。',
     'password' => '密碼錯誤',
     'throttle' => '嘗試登入太多次,請在 :seconds 秒後再試。',
+    'ban' => '當前用戶被禁止登錄。',
 ];

+ 1 - 0
routes/api.php

@@ -97,6 +97,7 @@ Route::middleware(['auth:sanctum'])->group(function () {
         Route::put("role/{role}/assign-permission", [API\RoleController::class, "assignPermissions"])->name("role.assign-permissions");
         Route::put("user/{user}/assign-role", [API\UserController::class, "assignRole"])->name("user.assign-role");
         Route::post("user/user-batch-create", [API\UserController::class, "batchStore"])->name("user.assign-role");
+        Route::put("user/status/{status}", [API\UserController::class, "status"])->name("user.status");
 
         Route::get("custom-field-group", [API\CustomFieldController::class, "groups"])->name("custom-field.groups");
         Route::get("custom-field-group/naming-rule", [API\CustomFieldController::class, "nameRuleGroups"])->name("custom-field.nameRuleGroups");