优化权限代码规范
parent
9ae7096051
commit
23b3356bed
|
|
@ -2,22 +2,8 @@
|
||||||
|
|
||||||
namespace App\Admin\Controllers;
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
use Dcat\Admin\Admin;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Dcat\Admin\Http\Controllers\AuthController as BaseAuthController;
|
use Dcat\Admin\Http\Controllers\AuthController as BaseAuthController;
|
||||||
|
|
||||||
class AuthController extends 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
|
class Administrator extends DcatAdministrator
|
||||||
{
|
{
|
||||||
|
public const SESSION_KEY = 'user_permissions';
|
||||||
|
|
||||||
public function hasPermission(string $slug): bool
|
public function hasPermission(string $slug): bool
|
||||||
{
|
{
|
||||||
//判断是否是超级管理员
|
//判断是否是超级管理员
|
||||||
if ($this->isAdministrator()) {
|
if ($this->isAdministrator()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$userPermissions = $this->getCachePermissions();
|
|
||||||
|
|
||||||
//获取缓存权限
|
|
||||||
if (!$userPermissions) {//未获取到则刷新
|
|
||||||
$userPermissions = $this->refreshCachePermissions();
|
|
||||||
}
|
|
||||||
|
|
||||||
//判断是否有权限
|
//判断是否有权限
|
||||||
if (in_array($slug, $userPermissions)) {
|
return in_array($slug, $this->getCachePermissions());
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -57,6 +25,31 @@ class Administrator extends DcatAdministrator
|
||||||
*/
|
*/
|
||||||
public function getCachePermissions(): ?array
|
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