瀏覽代碼

用户展示特定模块

liuzejian 2 年之前
父節點
當前提交
456df532e8

+ 7 - 0
modules/Common/Repository/Options/Modules.php

@@ -22,4 +22,11 @@ class Modules implements OptionInterface
 
         return $modules;
     }
+
+    public static function getAppModules() {
+        return app(ModuleRepository::class)->all([])
+            ->filter(function ($module) {
+                return 1 == ($module['isApp'] ?? 0);
+            });
+    }
 }

+ 3 - 0
modules/User/Http/Controllers/UserController.php

@@ -8,6 +8,7 @@ use Illuminate\Contracts\Auth\Authenticatable;
 use Illuminate\Contracts\Pagination\LengthAwarePaginator;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\DB;
+use Modules\Common\Repository\Options\Modules;
 use Modules\User\Models\LogLogin;
 use Modules\User\Models\LogOperate;
 use Modules\User\Models\User;
@@ -144,6 +145,8 @@ class UserController extends Controller
     {
         /* @var User $user */
         $user = $this->getLoginUser()->withPermissions();
+        $showApp = $request->get('app');
+        $user->showPermissions($showApp);
 
         if ($request->isMethod('post')) {
             return $user->updateBy($user->id, $request->all());

+ 16 - 0
modules/User/Models/User.php

@@ -6,6 +6,7 @@ use Catch\Base\CatchModel as Model;
 use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
 use Illuminate\Database\Eloquent\Casts\Attribute;
 use Laravel\Sanctum\HasApiTokens;
+use Modules\Common\Repository\Options\Modules;
 use Modules\User\Models\Traits\UserRelations;
 use Illuminate\Auth\Authenticatable;
 
@@ -104,4 +105,19 @@ class User extends Model implements AuthenticatableContract
 
         return parent::updateBy($id, $data);
     }
+
+    /**
+     * 如果$showApp为空那么就不展示所有isApp为true的模块
+     * 否则展示所有isApp为false以及showApp对应的name的模块
+     * @param string $showApp
+     */
+    public function showPermissions($showApp = '') {
+        $hiddenAppModuleNames = Modules::getAppModules()->reject(function ($module) use ($showApp) {
+            return $showApp == $module['name'];
+        })->pluck('name');
+        $enablePermissions = $this->getAttribute('permissions')->reject(function ($permission) use ($hiddenAppModuleNames){
+            return $hiddenAppModuleNames->contains($permission['module']);
+        });
+        $this->setAttribute('permissions', $enablePermissions);
+    }
 }

+ 7 - 0
tests/User/Http/Controllers/UserControllerTest.php

@@ -32,4 +32,11 @@ class UserControllerTest extends \Tests\UsedTestCase
         ])->json('post','http://localhost/api/users', \json_decode($jsonStr, true));
         $res->dump();
     }
+
+    public function testOnline() {
+        $res = $this->withHeaders([
+            'Authorization' => 'Bearer '. $this->token,
+        ])->json('get','http://localhost/api/user/online?app=contentManage');
+        $res->dump();
+    }
 }