优化权限代码规范
parent
9ae7096051
commit
23b3356bed
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue