63 lines
1.4 KiB
PHP
63 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Models\Admin;
|
|
|
|
use Dcat\Admin\Models\Administrator as DcatAdministrator;
|
|
|
|
class Administrator extends DcatAdministrator
|
|
{
|
|
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 array|null
|
|
*/
|
|
public function getCachePermissions(): ?array
|
|
{
|
|
return session('user_permissions');
|
|
}
|
|
}
|