From 23b3356bed7a221a1bdfa7f22a32a73cc68d5a8d Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Thu, 18 Nov 2021 14:45:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9D=83=E9=99=90=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Controllers/AuthController.php | 14 ----- app/Models/Admin/Administrator.php | 65 +++++++++++------------- 2 files changed, 29 insertions(+), 50 deletions(-) diff --git a/app/Admin/Controllers/AuthController.php b/app/Admin/Controllers/AuthController.php index aa3df3ae..2c1c8080 100644 --- a/app/Admin/Controllers/AuthController.php +++ b/app/Admin/Controllers/AuthController.php @@ -2,22 +2,8 @@ namespace App\Admin\Controllers; -use Dcat\Admin\Admin; -use Illuminate\Http\Request; use Dcat\Admin\Http\Controllers\AuthController as BaseAuthController; class AuthController extends BaseAuthController { - /** - * Send the response after the user was authenticated. - * - * @param \Illuminate\Http\Request $request - * @return \Symfony\Component\HttpFoundation\Response - */ - protected function sendLoginResponse(Request $request) - { - $user = Admin::user(); - $user->refreshCachePermissions(); - return parent::sendLoginResponse($request); - } } diff --git a/app/Models/Admin/Administrator.php b/app/Models/Admin/Administrator.php index d3b754cd..7047bbbb 100644 --- a/app/Models/Admin/Administrator.php +++ b/app/Models/Admin/Administrator.php @@ -6,48 +6,16 @@ use Dcat\Admin\Models\Administrator as DcatAdministrator; class Administrator extends DcatAdministrator { + public const SESSION_KEY = 'user_permissions'; + public function hasPermission(string $slug): bool { //判断是否是超级管理员 if ($this->isAdministrator()) { return true; } - - $userPermissions = $this->getCachePermissions(); - - //获取缓存权限 - if (!$userPermissions) {//未获取到则刷新 - $userPermissions = $this->refreshCachePermissions(); - } - //判断是否有权限 - if (in_array($slug, $userPermissions)) { - return true; - } - return false; - } - - /** - * 更新缓存权限:重新获取,并存入缓存 - * - * @return array|null - */ - public function refreshCachePermissions(): ?array - { - //获取角色权限 - $permissions = []; - foreach ($this->roles()->get() as $role) { - if ($role->name !== 'Administrator') { - foreach ($role->permissions as $permission) { - $permissions[] = $permission->slug; - } - } - } - - //缓存权限 - session(['user_permissions' => $permissions]); - - return $permissions; + return in_array($slug, $this->getCachePermissions()); } /** @@ -57,6 +25,31 @@ class Administrator extends DcatAdministrator */ public function getCachePermissions(): ?array { - return session('user_permissions'); + $key = self::SESSION_KEY; + if (session()->has($key)) { + return session($key); + } + //获取角色权限 + $permissions = []; + foreach ($this->roles()->get() as $role) { + if ($role->name === 'Administrator') { + continue; + } + foreach ($role->permissions as $permission) { + $permissions[] = $permission->slug; + } + } + + array_unique($permissions); + + //缓存权限 + session([$key => $permissions]); + + return $permissions; + } + + public function clearCachePermission() + { + session()->forget(self::SESSION_KEY); } }