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;
+ }
}