é¦å æ们å æ¥çä¸ä¸è¡¨ç»æ
CREATE TABLE `acl_permission` (
`id` char(19) NOT NULL DEFAULT '' COMMENT 'ç¼å·',
`pid` char(19) NOT NULL DEFAULT '' COMMENT 'æå±ä¸çº§',
`name` varchar(20) NOT NULL DEFAULT '' COMMENT 'å称',
`type` tinyint(3) NOT NULL DEFAULT '0' COMMENT 'ç±»å(1:èå,2:æé®)',
`permission_value` varchar(50) DEFAULT NULL COMMENT 'æéå¼',
`path` varchar(100) DEFAULT NULL COMMENT '访é®è·¯å¾',
`component` varchar(100) DEFAULT NULL COMMENT 'ç»ä»¶è·¯å¾',
`icon` varchar(50) DEFAULT NULL COMMENT 'å¾æ ',
`status` tinyint(4) DEFAULT NULL COMMENT 'ç¶æ(0:ç¦æ¢,1:æ£å¸¸)',
`is_deleted` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT 'é»è¾å é¤ 1ï¼trueï¼å·²å é¤ï¼ 0ï¼falseï¼æªå é¤',
`gmt_create` datetime DEFAULT NULL COMMENT 'å建æ¶é´',
`gmt_modified` datetime DEFAULT NULL COMMENT 'æ´æ°æ¶é´',
PRIMARY KEY (`id`),
KEY `idx_pid` (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='æé';
表æ°æ®
æéå®ä½ç±»
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("acl_permission")
@ApiModel(value="Permission对象", description="æé")
public class Permission implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "ç¼å·")
@TableId(value = "id", type = IdType.ID_WORKER_STR)
private String id;
@ApiModelProperty(value = "æå±ä¸çº§")
private String pid;
@ApiModelProperty(value = "å称")
private String name;
@ApiModelProperty(value = "ç±»å(1:èå,2:æé®)")
private Integer type;
@ApiModelProperty(value = "æéå¼")
private String permissionValue;
@ApiModelProperty(value = "访é®è·¯å¾")
private String path;
@ApiModelProperty(value = "ç»ä»¶è·¯å¾")
private String component;
@ApiModelProperty(value = "å¾æ ")
private String icon;
@ApiModelProperty(value = "ç¶æ(0:ç¦æ¢,1:æ£å¸¸)")
private Integer status;
@ApiModelProperty(value = "å±çº§")
@TableField(exist = false)
private Integer level;
@ApiModelProperty(value = "ä¸çº§")
@TableField(exist = false)
private List<Permission> children;
@ApiModelProperty(value = "æ¯å¦éä¸")
@TableField(exist = false)
private boolean isSelect;
@ApiModelProperty(value = "é»è¾å é¤ 1ï¼trueï¼å·²å é¤ï¼ 0ï¼falseï¼æªå é¤")
private Boolean isDeleted;
@ApiModelProperty(value = "å建æ¶é´")
private Date gmtCreate;
@ApiModelProperty(value = "æ´æ°æ¶é´")
private Date gmtModified;
}
主è¦å®ç°ççéå½é»è¾
@Service
public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permission> implements PermissionService {
@Override
public List<Permission> queryAllMenuGuli() {
//1 æ¥è¯¢èå表æææ°æ®
QueryWrapper<Permission> wrapper = new QueryWrapper<>();
wrapper.orderByDesc("id");
List<Permission> permissionList = baseMapper.selectList(wrapper);
//2 ææ¥è¯¢ææèålistéåæç
§è¦æ±è¿è¡å°è£
List<Permission> resultList = bulidPermission(permissionList);
return resultList;
}
//æè¿åææèålistéåè¿è¡å°è£
çæ¹æ³
public static List<Permission> bulidPermission(List<Permission> permissionList) {
//å建listéåï¼ç¨äºæ°æ®æç»å°è£
List<Permission> finalNode = new ArrayList<>();
//æææèålistéåéåï¼å¾å°é¡¶å±èå pid=0èåï¼è®¾ç½®levelæ¯1
for(Permission permissionNode : permissionList) {
//å¾å°é¡¶å±èå pid=0èå
if("0".equals(permissionNode.getPid())) {
//设置顶å±èåçlevelæ¯1
permissionNode.setLevel(1);
//æ ¹æ®é¡¶å±èåï¼åéé¢è¿è¡æ¥è¯¢åèåï¼å°è£
å°finalNodeéé¢
finalNode.add(selectChildren(permissionNode,permissionList));
}
}
return finalNode;
}
private static Permission selectChildren(Permission permissionNode, List<Permission> permissionList) {
//1 å 为åä¸å±èåéé¢æ¾äºå±èåï¼äºå±éé¢è¿è¦æ¾ä¸å±ï¼æ对象åå§å
permissionNode.setChildren(new ArrayList<Permission>());
//2 éåææèålistéåï¼è¿è¡å¤ææ¯è¾ï¼æ¯è¾idåpidå¼æ¯å¦ç¸å
for(Permission it : permissionList) {
//å¤æ idåpidå¼æ¯å¦ç¸å
if(permissionNode.getId().equals(it.getPid())) {
//æç¶èåçlevelå¼+1
int level = permissionNode.getLevel()+1;
it.setLevel(level);
//å¦æchildren为空ï¼è¿è¡åå§åæä½
if(permissionNode.getChildren() == null) {
permissionNode.setChildren(new ArrayList<Permission>());
}
//ææ¥è¯¢åºæ¥çåèåæ¾å°ç¶èåéé¢
permissionNode.getChildren().add(selectChildren(it,permissionList));
}
}
return permissionNode;
}
}
æµè¯æ°æ®ï¼
{
"success": true,
"code": 20000,
"message": "æå",
"data": {
"children": [
{
"id": "1",
"pid": "0",
"name": "å
¨é¨æ°æ®",
"type": 0,
"permissionValue": null,
"path": null,
"component": null,
"icon": null,
"status": null,
"level": 1,
"children": [
{
"id": "1195354076890370050",
"pid": "1",
"name": "订å管ç",
"type": 1,
"permissionValue": null,
"path": "/order",
"component": "Layout",
"icon": null,
"status": null,
"level": 2,
"children": [
{
"id": "1195354153482555393",
"pid": "1195354076890370050",
"name": "订åå表",
"type": 1,
"permissionValue": null,
"path": "list",
"component": "/order/list",
"icon": null,
"status": null,
"level": 3,
"children": [
{
"id": "1195354315093282817",
"pid": "1195354153482555393",
"name": "æ¥ç",
"type": 2,
"permissionValue": "order.list",
"path": "",
"component": "",
"icon": null,
"status": null,
"level": 4,
"children": [],
"isDeleted": false,
"gmtCreate": "2019-11-15 22:54:12",
"gmtModified": "2019-11-15 22:54:12",
"select": false
}
],
"isDeleted": false,
"gmtCreate": "2019-11-15 22:53:33",
"gmtModified": "2019-11-15 22:53:58",
"select": false
}
],
"isDeleted": false,
"gmtCreate": "2019-11-15 22:53:15",
"gmtModified": "2019-11-15 22:53:15",
"select": false
},
ä¸çº§ç®å½éé¢å å«äºçº§ç®å½ï¼äºçº§ç®å½éé¢å å«ä¸çº§ç®å½
é£ä¹å½å é¤ç¶çº§èåçæ¶åï¼å ¶ä¸çææåèåé½åºè¯¥è¢«å é¤ãè¿æ¶ååºè¯¥ä½¿ç¨éå½å é¤æ¹ç¶çº§èåä¸çææåèåã
ä¸ä»£ç ï¼
@Service
public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permission> implements PermissionService {
//============éå½å é¤èå==================================
@Override
public void removeChildByIdGuli(String id) {
//1 å建listéåï¼ç¨äºå°è£
ææå é¤èåidå¼
List<String> idList = new ArrayList<>();
//2 åidListéå设置å é¤èåid
this.selectPermissionChildById(id,idList);
//æå½åidå°è£
å°listéé¢
idList.add(id);
baseMapper.deleteBatchIds(idList);
}
//2 æ ¹æ®å½åèåidï¼æ¥è¯¢èåéé¢åèåidï¼å°è£
å°listéå
private void selectPermissionChildById(String id, List<String> idList) {
//æ¥è¯¢èåéé¢åèåid
QueryWrapper<Permission> wrapper = new QueryWrapper<>();
wrapper.eq("pid",id);
wrapper.select("id");
List<Permission> childIdList = baseMapper.selectList(wrapper);
//æchildIdListéé¢èåidå¼è·ååºæ¥ï¼å°è£
idListéé¢ï¼åéå½æ¥è¯¢
childIdList.stream().forEach(item -> {
//å°è£
idListéé¢
idList.add(item.getId());
//éå½æ¥è¯¢
this.selectPermissionChildById(item.getId(),idList);
});
}
}
æ¥æºï¼https://blog.csdn.net/u014496893/article/details/113446889