From 5c3f8679ce315363f12025d7cead8e0553ac31ee Mon Sep 17 00:00:00 2001 From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com> Date: Thu, 4 Dec 2025 17:54:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=AA=E8=A1=A8=E7=9B=98=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserDashboardRuleController.php | 33 ++++++++ app/common/logic/PermLogic.php | 7 ++ app/common/logic/UserDashboardRuleLogic.php | 46 +++++++++++ app/common/model/UserDashboardRule.php | 49 ++++++++++++ app/common/service/ResourceService.php | 3 + .../service/UserDashboardRuleService.php | 78 +++++++++++++++++++ .../validate/UserDashboardRuleValidate.php | 29 +++++++ config/route.php | 13 +++- 8 files changed, 257 insertions(+), 1 deletion(-) create mode 100644 app/admin/controller/UserDashboardRuleController.php create mode 100644 app/common/logic/UserDashboardRuleLogic.php create mode 100644 app/common/model/UserDashboardRule.php create mode 100644 app/common/service/UserDashboardRuleService.php create mode 100644 app/common/validate/UserDashboardRuleValidate.php diff --git a/app/admin/controller/UserDashboardRuleController.php b/app/admin/controller/UserDashboardRuleController.php new file mode 100644 index 0000000..7921a98 --- /dev/null +++ b/app/admin/controller/UserDashboardRuleController.php @@ -0,0 +1,33 @@ +service = new UserDashboardRuleService(); + } + + /** + * 列表页数据格式化 + * + * @param array $data + * @return array + */ + // protected function indexFormat($data) + // { + // if (isset($data['created_at'])) + // $data['created_at'] = date('Y-m-d H:i:s', $data['created_at']); + // if (isset($data['updated_at'])) + // $data['updated_at'] = date('Y-m-d H:i:s', $data['updated_at']); + // return $data; + // } +} \ No newline at end of file diff --git a/app/common/logic/PermLogic.php b/app/common/logic/PermLogic.php index 808cb15..0e27757 100644 --- a/app/common/logic/PermLogic.php +++ b/app/common/logic/PermLogic.php @@ -23,6 +23,13 @@ class PermLogic } $all = collect(); + //获取仪表盘 + $resources_id = (new UserDashboardRuleLogic)->getUserDashboard($userId); + if(!empty($resources_id)){ + $resources = Resource::where('id', $resources_id)->first(); + $all = $all->merge($resources); + } + // 遍历用户的所有角色,合并每个角色所拥有的资源 foreach ($user->roles as $role) { $all = $all->merge( diff --git a/app/common/logic/UserDashboardRuleLogic.php b/app/common/logic/UserDashboardRuleLogic.php new file mode 100644 index 0000000..2a74634 --- /dev/null +++ b/app/common/logic/UserDashboardRuleLogic.php @@ -0,0 +1,46 @@ +find($userId);; + //获取用户所在分组 + $ugm = UserGroupMembers::where('user_id', $userId)->where('status', 1)->get(); + + $roleRule = UserDashboardRule::orWhere(function ($query) use ($user) { + $query->whereIn('related', $user->roles->pluck('id')) + ->where('rule_type', 'role'); + }) + ->orWhere(function ($query) use ($userId) { + $query->where('related', $userId) + ->where('rule_type', 'user'); + }) + ->orWhere(function ($query) use ($ugm) { + $query->where('related', $ugm->group_id) + ->where('rule_type', 'group'); + }) + ->orderBy('weight','desc') + ->orderBy('rule_type','desc') + ->first(); + + $resources_id = $roleRule?$roleRule->resources_id:null; + return $resources_id; + } + +} \ No newline at end of file diff --git a/app/common/model/UserDashboardRule.php b/app/common/model/UserDashboardRule.php new file mode 100644 index 0000000..4fa640c --- /dev/null +++ b/app/common/model/UserDashboardRule.php @@ -0,0 +1,49 @@ +validator; + } + + /** + * 构造 CrudUtil 查询配置 + */ + protected function buildQueryConfig(Request $request, string $scene = 'default'): array + { + $p = $request->all(); + + $config = []; + $config['model'] = $this->modelClass; + switch ($scene) { + case 'default': + $config['where']['status'] = 1; + $config['order']['id'] = 'desc'; + break; + case 'index': + $config['where']['status'] = 1; + $config['order']['id'] = 'desc'; + break; + case 'show': + $config['where']['id'] = $p['id']; + $config['where']['status'] = 1; + break; + case 'store': + break; + case 'update': + $config['where']['id'] = $p['id']; + break; + case 'destroy': + $config['where']['id'] = $p['id']; + break; + } + + return $config; + } + + /** + * 添加前置处理 + */ + public function beforeServiceStore($data, Request $request) + { + if(!isset($data['weight']) || ($data['weight'] == null || $data['weight'] == '')){ + throw new \Exception("权重不能为空"); + } + return $data; + } +} \ No newline at end of file diff --git a/app/common/validate/UserDashboardRuleValidate.php b/app/common/validate/UserDashboardRuleValidate.php new file mode 100644 index 0000000..3adc601 --- /dev/null +++ b/app/common/validate/UserDashboardRuleValidate.php @@ -0,0 +1,29 @@ + [ + + ], + + 'update' => [ + + ] + ]; +} \ No newline at end of file diff --git a/config/route.php b/config/route.php index 7b092f3..8039634 100644 --- a/config/route.php +++ b/config/route.php @@ -350,7 +350,7 @@ Route::group('/admin', function () { Route::any('/destroy', [app\admin\controller\SysAccountController::class, 'destroy']); }); - // 账户 + // 港口 Route::group('/port', function () { Route::any('/list', [app\admin\controller\SysPortController::class, 'index']); Route::any('/show', [app\admin\controller\SysPortController::class, 'show']); @@ -505,6 +505,17 @@ Route::group('/admin', function () { Route::any('/destroy', [app\admin\controller\FinanceReconDubaiFilesController::class, 'destroy']); }); }); + + //仪表盘路由规则 + Route::group('/dashboard', function () { + Route::group('/rule', function () { + Route::any('/list', [app\admin\controller\UserDashboardRuleController::class, 'index']); + Route::any('/show', [app\admin\controller\UserDashboardRuleController::class, 'show']); + Route::any('/store', [app\admin\controller\UserDashboardRuleController::class, 'store']); + Route::any('/update', [app\admin\controller\UserDashboardRuleController::class, 'update']); + Route::any('/destroy', [app\admin\controller\UserDashboardRuleController::class, 'destroy']); + }); + }); });