- 权限表结构:
CREATE TABLE `crm_permission` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '权限名称',
`url` varchar(100) NOT NULL COMMENT '链接地址',
`status` tinyint(1) NOT NULL COMMENT '状态;1:启用,2:禁用',
`p_id` int(11) NOT NULL DEFAULT '0' COMMENT '父节点ID',
`is_menu` tinyint(1) NOT NULL COMMENT '是否是菜单;1:是2,否',
`is_hidden` tinyint(1) NOT NULL COMMENT '是否隐藏;1:是,2:否',
`title` varchar(50) NOT NULL COMMENT '标题',
`path` varchar(50) NOT NULL COMMENT '地址',
`icon` varchar(50) NOT NULL COMMENT '图标',
`method` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COMMENT='权限表';
2. 查询出全部
return self::query()->where('status', 1)->get()->toArray();
Array
(
[0] => Array
(
[id] => 1
[name] => 系统管理
[url] => /
[status] => 1
[p_id] => 0
[is_menu] => 1
[is_hidden] => 2
[title] => 系统管理
[path] => /
[icon] => icon
[method] => *
)
[1] => Array
(
[id] => 2
[name] => 用户管理
[url] => user/index
[status] => 1
[p_id] => 1
[is_menu] => 1
[is_hidden] => 2
[title] => 用户管理
[path] => user/index
[icon] => icon
[method] => POST
)
[2] => Array
(
[id] => 3
[name] => 角色管理
[url] => role/index
[status] => 1
[p_id] => 1
[is_menu] => 1
[is_hidden] => 2
[title] => 角色管理
[path] => role/index
[icon] => icon
[method] => POST
)
[3] => Array
(
[id] => 4
[name] => 菜单管理
[url] => permission/index
[status] => 1
[p_id] => 1
[is_menu] => 1
[is_hidden] => 2
[title] => 菜单管理
[path] => permission/index
[icon] => icon
[method] => POST
)
[4] => Array
(
[id] => 5
[name] => 用户添加
[url] => user/create
[status] => 1
[p_id] => 2
[is_menu] => 1
[is_hidden] => 2
[title] => 用户添加
[path] => user/create
[icon] => icon
[method] => POST
)
[5] => Array
(
[id] => 6
[name] => 角色添加
[url] => role/create
[status] => 1
[p_id] => 3
[is_menu] => 1
[is_hidden] => 2
[title] => 角色添加
[path] => role/create
[icon] => icon
[method] => POST
)
[6] => Array
(
[id] => 7
[name] => 菜单添加
[url] => permission/create
[status] => 1
[p_id] => 4
[is_menu] => 1
[is_hidden] => 2
[title] => 菜单添加
[path] => permission/create
[icon] => icon
[method] => POST
)
[7] => Array
(
[id] => 8
[name] => 用户编辑
[url] => user/update
[status] => 1
[p_id] => 2
[is_menu] => 1
[is_hidden] => 2
[title] => 用户编辑
[path] => user/update
[icon] => icon
[method] => POST
)
)
- 调用递归方法
public static function getTreeBytList($list, $pk = 'id', $pid = 'p_id', $child = 'children', $root = 0): array
{
$tree = [];
foreach ($list as $key => $val) {
if ($val[$pid] === $root) {
// 获取当前$pid所有子类
unset($list[$key]);
if (!empty($list)) {
$child = self::getTreeBytList($list, $pk, $pid, $child, $val[$pk]);
if (!empty($child)) {
$val['children'] = $child;
}
}
$tree[] = $val;
}
}
return $tree;
}
- 输出权限树
{
"code": 200,
"msg": "操作成功",
"data": [
{
"id": 1,
"name": "系统管理",
"url": "/",
"status": 1,
"p_id": 0,
"is_menu": 1,
"is_hidden": 2,
"title": "系统管理",
"path": "/",
"icon": "icon",
"method": "*",
"children": [
{
"id": 2,
"name": "用户管理",
"url": "user/index",
"status": 1,
"p_id": 1,
"is_menu": 1,
"is_hidden": 2,
"title": "用户管理",
"path": "user/index",
"icon": "icon",
"method": "POST",
"children": [
{
"id": 5,
"name": "用户添加",
"url": "user/create",
"status": 1,
"p_id": 2,
"is_menu": 1,
"is_hidden": 2,
"title": "用户添加",
"path": "user/create",
"icon": "icon",
"method": "POST"
},
{
"id": 8,
"name": "用户编辑",
"url": "user/update",
"status": 1,
"p_id": 2,
"is_menu": 1,
"is_hidden": 2,
"title": "用户编辑",
"path": "user/update",
"icon": "icon",
"method": "POST"
}
]
},
{
"id": 3,
"name": "角色管理",
"url": "role/index",
"status": 1,
"p_id": 1,
"is_menu": 1,
"is_hidden": 2,
"title": "角色管理",
"path": "role/index",
"icon": "icon",
"method": "POST",
"children": [
{
"id": 6,
"name": "角色添加",
"url": "role/create",
"status": 1,
"p_id": 3,
"is_menu": 1,
"is_hidden": 2,
"title": "角色添加",
"path": "role/create",
"icon": "icon",
"method": "POST"
}
]
},
{
"id": 4,
"name": "菜单管理",
"url": "permission/index",
"status": 1,
"p_id": 1,
"is_menu": 1,
"is_hidden": 2,
"title": "菜单管理",
"path": "permission/index",
"icon": "icon",
"method": "POST",
"children": [
{
"id": 7,
"name": "菜单添加",
"url": "permission/create",
"status": 1,
"p_id": 4,
"is_menu": 1,
"is_hidden": 2,
"title": "菜单添加",
"path": "permission/create",
"icon": "icon",
"method": "POST"
}
]
}
]
}
]
}