diff --git a/extend/base/admin/view/index/ext/admin_menu_tab_content_demo.html b/extend/base/admin/view/index/ext/admin_menu_tab_content_demo.html index 7215b36..888bc3e 100644 --- a/extend/base/admin/view/index/ext/admin_menu_tab_content_demo.html +++ b/extend/base/admin/view/index/ext/admin_menu_tab_content_demo.html @@ -1,4 +1,7 @@ -
+
{var name='a1' value='a1' /} @@ -9,4 +12,24 @@ {assign name='a3' value='a3' /} {$a3} +
+ 动态设置权限 +
+
+if (date('i') % 2 == 0) {
+    /** @var AuthService $authService */
+    $authService = app(AuthService::class);
+    $authService->disableNode('debug.log/export', false);
+}
+    
+

当分钟数为双数时,禁用指定的权限。

+

+ 日志导出权限: + {if auth('debug.log/export') } + 有权限 + {else /} + 无权限 + {/if} +

+

{:date('i')}分

\ No newline at end of file diff --git a/extend/base/common/event/AdminMenuTab/DemoEventBase.php b/extend/base/common/event/AdminMenuTab/DemoEventBase.php index 0b3298c..a51e843 100644 --- a/extend/base/common/event/AdminMenuTab/DemoEventBase.php +++ b/extend/base/common/event/AdminMenuTab/DemoEventBase.php @@ -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, diff --git a/extend/base/common/service/AuthServiceBase.php b/extend/base/common/service/AuthServiceBase.php index a96d53e..1345c46 100644 --- a/extend/base/common/service/AuthServiceBase.php +++ b/extend/base/common/service/AuthServiceBase.php @@ -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; + } }