feat: 增加动态设置当前账户的权限功能;增加该功能演示效果

This commit is contained in:
augushong
2025-04-21 15:54:07 +08:00
parent 81860e8277
commit c1042ce1c6
3 changed files with 59 additions and 3 deletions

View File

@@ -1,4 +1,7 @@
<div lay-id="layuiminiDemoTabIdContent" class="layui-tab-item">
<div
lay-id="layuiminiDemoTabIdContent"
class="layui-tab-item"
>
<!-- var的用法如果变量未声明则声明比如a1 -->
{var name='a1' value='a1' /}
@@ -9,4 +12,24 @@
<!-- 与assign区别即便其他地方已经定义了a3此处仍然会被定义 -->
{assign name='a3' value='a3' /}
{$a3}
<div class="ul-group-title">
动态设置权限
</div>
<pre>
if (date('i') % 2 == 0) {
/** @var AuthService $authService */
$authService = app(AuthService::class);
$authService->disableNode('debug.log/export', false);
}
</pre>
<p>当分钟数为双数时,禁用指定的权限。</p>
<p>
日志导出权限:
{if auth('debug.log/export') }
有权限
{else /}
无权限
{/if}
</p>
<p>{:date('i')}</p>
</div>

View File

@@ -2,6 +2,7 @@
namespace base\common\event\AdminMenuTab;
use app\common\service\AuthService;
use think\facade\Env;
use think\facade\View;
@@ -17,8 +18,15 @@ class DemoEventBase
$tab_content = View::layout(false)->fetch('index/ext/admin_menu_tab_content_demo');
}
View::assign('a2','x2');
View::assign('a3','x3');
View::assign('a2', 'x2');
View::assign('a3', 'x3');
if (date('i') % 2 == 0) {
/** @var AuthService $authService */
$authService = app(AuthService::class);
$authService->disableNode('debug.log/export', false);
}
// 事件监听处理
return [
'view_content' => $content,

View File

@@ -52,6 +52,8 @@ class AuthServiceBase
protected $nodeService;
protected static $dynamicNodeList = [];
/***
* 构造方法
* AuthService constructor.
@@ -64,6 +66,9 @@ class AuthServiceBase
{
$this->nodeService = new NodeService();
if(empty($adminId)){
$adminId = get_session_admin('id');
}
$this->adminId = $adminId;
$this->adminInfo = $this->getAdminInfo();
$this->nodeList = $this->getNodeList();
@@ -87,6 +92,10 @@ class AuthServiceBase
*/
public function checkNode($node = null)
{
if(isset(static::$dynamicNodeList[$node])){
return static::$dynamicNodeList[$node];
}
// 判断是否为超级管理员
if ($this->isSuperAdmin()) {
return true;
@@ -101,6 +110,7 @@ class AuthServiceBase
} else {
$node = $this->parseNodeStr($node);
}
// 判断是否加入节点控制,优先获取缓存信息
if (!isset($this->nodeList[$node])) {
return Config::get('admin.default_auth_check');
@@ -213,4 +223,19 @@ class AuthServiceBase
return $node;
}
public function disableNode($node, $skipSuperAdmin = true)
{
if($this->isSuperAdmin()){
if($skipSuperAdmin){
return;
}
}
static::$dynamicNodeList[$node] = false;
}
public function enableNode($node)
{
static::$dynamicNodeList[$node] = true;
}
}