feat: 升级权限管理模式

This commit is contained in:
augushong
2025-03-20 16:57:05 +08:00
parent 1887733b32
commit d3e85fa552
50 changed files with 330 additions and 1125 deletions

View File

@@ -10,7 +10,6 @@ use app\admin\model\SystemAuth;
use app\admin\model\SystemAuthNode;
use app\admin\model\SystemConfig;
use app\admin\model\SystemMenu;
use app\admin\model\SystemNode;
use app\admin\model\SystemQuick;
use app\common\constants\AdminConstant;
@@ -126,11 +125,6 @@ class AdminInitServiceBase
$list_auth_node = $this->requireData('SystemAuthNode');
$this->installData(SystemAuthNode::class, $list_auth_node);
$output->writeln('开始初始化系统节点');
$list_node = $this->requireData('SystemNode');
$this->installData(SystemNode::class, $list_node);
}
protected function installData($model_name, $list)

View File

@@ -22,4 +22,56 @@ class NodeServiceBase
return $nodeList;
}
public function getNodeParis()
{
$node_list = $this->getNodelist();
return array_column($node_list, null, 'node');
}
public function getNodeCollection()
{
$nodeList = $this->getNodelist();
$nodeCollection = collect($nodeList);
return $nodeCollection;
}
/**
* 获取节点服务
* @return array
* @throws \Doctrine\Common\Annotations\AnnotationException
* @throws \ReflectionException
*/
public function getNodeTree()
{
$nodelList = $this->getNodelist();
$newNodeList = [];
foreach ($nodelList as $vo) {
if ($vo['type'] == 1) {
if (!isset($newNodeList[$vo['module']])) {
$newNodeList[$vo['module']] = [
'title' => $vo['module'],
'children' => [],
];
}
$vo['title'] = "{$vo['title']}";
$children = [];
foreach ($nodelList as $v) {
if ($v['type'] == 2 && strpos($v['node'], $vo['node'] . '/') !== false) {
$v['title'] = "{$v['title']}";
$children[] = $v;
}
}
!empty($children) && $vo['children'] = $children;
$newNodeList[$vo['module']]['children'][] = $vo;
}
}
$newNodeList = array_values($newNodeList);
array_unshift($newNodeList, ['title' => '全部', 'children' => []]);
return $newNodeList;
}
}

View File

@@ -1,726 +0,0 @@
<?php
$ul_system_node = array(
array(
"id" => 1,
"node" => "system.admin",
"title" => "管理员管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347263,
"update_time" => 1657347263
),
array(
"id" => 2,
"node" => "system.admin/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347263,
"update_time" => 1657347263
),
array(
"id" => 3,
"node" => "system.admin/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347263,
"update_time" => 1657347263
),
array(
"id" => 4,
"node" => "system.admin/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347263,
"update_time" => 1657347263
),
array(
"id" => 5,
"node" => "system.admin/password",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347263,
"update_time" => 1657347263
),
array(
"id" => 6,
"node" => "system.admin/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347263,
"update_time" => 1657347263
),
array(
"id" => 7,
"node" => "system.admin/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347263,
"update_time" => 1657347263
),
array(
"id" => 8,
"node" => "system.admin/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347264,
"update_time" => 1657347264
),
array(
"id" => 9,
"node" => "system.auth",
"title" => "角色权限管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347264,
"update_time" => 1657347264
),
array(
"id" => 10,
"node" => "system.auth/authorize",
"title" => "授权",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347264,
"update_time" => 1657347264
),
array(
"id" => 11,
"node" => "system.auth/saveAuthorize",
"title" => "授权保存",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347264,
"update_time" => 1657347264
),
array(
"id" => 12,
"node" => "system.auth/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347264,
"update_time" => 1657347264
),
array(
"id" => 13,
"node" => "system.auth/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347264,
"update_time" => 1657347264
),
array(
"id" => 14,
"node" => "system.auth/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347264,
"update_time" => 1657347264
),
array(
"id" => 15,
"node" => "system.auth/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347265,
"update_time" => 1657347265
),
array(
"id" => 16,
"node" => "system.auth/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347265,
"update_time" => 1657347265
),
array(
"id" => 17,
"node" => "system.auth/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347265,
"update_time" => 1657347265
),
array(
"id" => 18,
"node" => "system.config",
"title" => "系统配置管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347265,
"update_time" => 1657347265
),
array(
"id" => 19,
"node" => "system.config/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347265,
"update_time" => 1657347265
),
array(
"id" => 20,
"node" => "system.config/save",
"title" => "保存",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347265,
"update_time" => 1657347265
),
array(
"id" => 21,
"node" => "system.menu",
"title" => "菜单管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347265,
"update_time" => 1657347265
),
array(
"id" => 22,
"node" => "system.menu/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347265,
"update_time" => 1657347265
),
array(
"id" => 23,
"node" => "system.menu/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347266,
"update_time" => 1657347266
),
array(
"id" => 24,
"node" => "system.menu/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347266,
"update_time" => 1657347266
),
array(
"id" => 25,
"node" => "system.menu/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347266,
"update_time" => 1657347266
),
array(
"id" => 26,
"node" => "system.menu/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347266,
"update_time" => 1657347266
),
array(
"id" => 27,
"node" => "system.menu/getMenuTips",
"title" => "添加菜单提示",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347266,
"update_time" => 1657347266
),
array(
"id" => 28,
"node" => "system.menu/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347266,
"update_time" => 1657347266
),
array(
"id" => 29,
"node" => "system.node",
"title" => "系统节点管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347266,
"update_time" => 1657347266
),
array(
"id" => 30,
"node" => "system.node/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347266,
"update_time" => 1657347266
),
array(
"id" => 31,
"node" => "system.node/refreshNode",
"title" => "系统节点更新",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347267,
"update_time" => 1657347267
),
array(
"id" => 32,
"node" => "system.node/clearNode",
"title" => "清除失效节点",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347267,
"update_time" => 1657347267
),
array(
"id" => 33,
"node" => "system.node/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347267,
"update_time" => 1657347267
),
array(
"id" => 34,
"node" => "system.node/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347267,
"update_time" => 1657347267
),
array(
"id" => 35,
"node" => "system.node/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347267,
"update_time" => 1657347267
),
array(
"id" => 36,
"node" => "system.node/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347267,
"update_time" => 1657347267
),
array(
"id" => 37,
"node" => "system.node/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347267,
"update_time" => 1657347267
),
array(
"id" => 38,
"node" => "system.uploadfile",
"title" => "上传文件管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347268,
"update_time" => 1657347268
),
array(
"id" => 39,
"node" => "system.uploadfile/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347268,
"update_time" => 1657347268
),
array(
"id" => 40,
"node" => "system.uploadfile/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347268,
"update_time" => 1657347268
),
array(
"id" => 41,
"node" => "system.uploadfile/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347268,
"update_time" => 1657347268
),
array(
"id" => 42,
"node" => "system.uploadfile/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347268,
"update_time" => 1657347268
),
array(
"id" => 43,
"node" => "system.uploadfile/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347268,
"update_time" => 1657347268
),
array(
"id" => 44,
"node" => "system.uploadfile/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347268,
"update_time" => 1657347268
),
array(
"id" => 45,
"node" => "mall.cate",
"title" => "商品分类管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347268,
"update_time" => 1657347268
),
array(
"id" => 46,
"node" => "mall.cate/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347269,
"update_time" => 1657347269
),
array(
"id" => 47,
"node" => "mall.cate/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347269,
"update_time" => 1657347269
),
array(
"id" => 48,
"node" => "mall.cate/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347269,
"update_time" => 1657347269
),
array(
"id" => 49,
"node" => "mall.cate/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347269,
"update_time" => 1657347269
),
array(
"id" => 50,
"node" => "mall.cate/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347269,
"update_time" => 1657347269
),
array(
"id" => 51,
"node" => "mall.cate/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347269,
"update_time" => 1657347269
),
array(
"id" => 52,
"node" => "mall.goods",
"title" => "商城商品管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347269,
"update_time" => 1657347269
),
array(
"id" => 53,
"node" => "mall.goods/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347270,
"update_time" => 1657347270
),
array(
"id" => 54,
"node" => "mall.goods/stock",
"title" => "入库",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347270,
"update_time" => 1657347270
),
array(
"id" => 55,
"node" => "mall.goods/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347270,
"update_time" => 1657347270
),
array(
"id" => 56,
"node" => "mall.goods/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347270,
"update_time" => 1657347270
),
array(
"id" => 57,
"node" => "mall.goods/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347270,
"update_time" => 1657347270
),
array(
"id" => 58,
"node" => "mall.goods/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347270,
"update_time" => 1657347270
),
array(
"id" => 59,
"node" => "mall.goods/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347270,
"update_time" => 1657347270
),
array(
"id" => 60,
"node" => "system.quick",
"title" => "快捷入口管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347270,
"update_time" => 1657347270
),
array(
"id" => 61,
"node" => "system.quick/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347271,
"update_time" => 1657347271
),
array(
"id" => 62,
"node" => "system.quick/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347271,
"update_time" => 1657347271
),
array(
"id" => 63,
"node" => "system.quick/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347271,
"update_time" => 1657347271
),
array(
"id" => 64,
"node" => "system.quick/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347271,
"update_time" => 1657347271
),
array(
"id" => 65,
"node" => "system.quick/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347271,
"update_time" => 1657347271
),
array(
"id" => 66,
"node" => "system.quick/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347271,
"update_time" => 1657347271
),
array(
"id" => 69,
"node" => "debug.log",
"title" => "debug_log",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347271,
"update_time" => 1657347271
),
array(
"id" => 70,
"node" => "debug.log/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347272,
"update_time" => 1657347272
),
array(
"id" => 71,
"node" => "debug.log/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347272,
"update_time" => 1657347272
),
array(
"id" => 72,
"node" => "debug.log/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347272,
"update_time" => 1657347272
),
array(
"id" => 73,
"node" => "debug.log/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347272,
"update_time" => 1657347272
),
array(
"id" => 74,
"node" => "debug.log/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347272,
"update_time" => 1657347272
),
array(
"id" => 75,
"node" => "debug.log/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347272,
"update_time" => 1657347272
),
array(
"id" => 76,
"node" => "mall.tag",
"title" => "mall_tag",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347614,
"update_time" => 1657347614
),
array(
"id" => 77,
"node" => "mall.tag/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347614,
"update_time" => 1657347614
),
array(
"id" => 78,
"node" => "mall.tag/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347615,
"update_time" => 1657347615
),
array(
"id" => 79,
"node" => "mall.tag/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347615,
"update_time" => 1657347615
),
array(
"id" => 80,
"node" => "mall.tag/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347615,
"update_time" => 1657347615
),
array(
"id" => 81,
"node" => "mall.tag/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347615,
"update_time" => 1657347615
),
array(
"id" => 82,
"node" => "mall.tag/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347615,
"update_time" => 1657347615
)
);
return $ul_system_node;

View File

@@ -44,4 +44,15 @@ return [
'php think migrate:run',
],
],
[
'version' => 'v2.0.116',
'desc' => [
'本次更新使用了新的权限模式,需要运行以下命令更新表结构:',
'php think migrate:run',
'由于使用了新的权限模式,您需要重新设置角色的权限设置,原来的权限已失效,',
'本次更新弃用了system_node表建议手动删除',
'本次更新弃用了system_auth_node表的node_id字段建议手动删除',
'本版本之后,修改了上述表格结构的安装文件,无需手动处理。',
],
],
];

View File

@@ -39,9 +39,9 @@ class ControllerAnnotationBase
public $title = '';
/**
* 是否开启权限控制.
* @Enum({true,false})
* @var bool
* 功能所属模块.
*
* @var string
*/
public $auth = true;
public $module = '通用';
}

View File

@@ -87,7 +87,7 @@ class NodeBase
$actionList[] = [
'node' => $controllerFormat . '/' . $method_name,
'title' => $actionTitle,
'is_auth' => $actionAuth,
'auth' => $actionAuth,
'type' => 2,
];
}
@@ -100,7 +100,7 @@ class NodeBase
$actionList[] = [
'node' => $controllerFormat . '/' . $nodeAnnotation->name,
'title' => $nodeAnnotation->title,
'is_auth' => $nodeAnnotation->auth,
'auth' => $nodeAnnotation->auth,
'type' => 2,
];
}
@@ -110,12 +110,16 @@ class NodeBase
if (!empty($actionList)) {
// 读取Controller的注解
$controllerAnnotation = $reader->getClassAnnotation($reflectionClass, ControllerAnnotation::class);
$controllerTitle = !empty($controllerAnnotation) && !empty($controllerAnnotation->title) ? $controllerAnnotation->title : null;
$controllerAuth = !empty($controllerAnnotation) && !empty($controllerAnnotation->auth) ? $controllerAnnotation->auth : false;
$controllerTitle = null;
$controllerModule = '通用';
if(!empty($controllerAnnotation)){
$controllerTitle = $controllerAnnotation->title;
$controllerModule = $controllerAnnotation->module;
}
$nodeList[] = [
'node' => $controllerFormat,
'title' => $controllerTitle,
'is_auth' => $controllerAuth,
'module' => $controllerModule,
'type' => 1,
];
$nodeList = array_merge($nodeList, $actionList);