6
0
Fork 0

优化权限代码规范

release
vine_liutk 2021-11-18 14:45:19 +08:00
parent 9ae7096051
commit 23b3356bed
2 changed files with 29 additions and 50 deletions

View File

@ -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);
}
}

View File

@ -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);
}
}