1 package com.supwisdom.institute.backend.base.domain.service;
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.LinkedHashMap;
9 import lombok.extern.slf4j.Slf4j;
11 import org.apache.commons.lang3.StringUtils;
12 import org.springframework.beans.factory.annotation.Autowired;
13 import org.springframework.stereotype.Service;
15 import com.supwisdom.institute.backend.base.domain.entity.Permission;
16 import com.supwisdom.institute.backend.base.domain.model.PermissionTreeNode;
17 import com.supwisdom.institute.backend.base.domain.repo.PermissionRepository;
18 import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
19 import com.supwisdom.institute.backend.common.framework.service.ABaseService;
23 public class PermissionService extends ABaseService<Permission, PermissionRepository> {
26 public PermissionRepository getRepo() {
27 return permissionRepository;
31 private PermissionRepository permissionRepository;
34 public Permission insert(Permission entity) {
35 Permission parentPermission = permissionRepository.selectById(entity.getParentId());
36 if (parentPermission != null) {
37 entity.setApplicationId(parentPermission.getApplicationId());
40 return super.insert(entity);
43 public void deleteBatch(List<String> ids) {
45 ids.stream().forEach(id -> {
50 private Permission selectApplicationPermission() {
51 Permission permission = permissionRepository.selectById(Permission.APPLICATION_ID);
56 private List<Permission> selectApplicationPermissionList() {
57 Map<String, Object> mapBean = new HashMap<String, Object>();
58 mapBean.put("type", Permission.TYPE_APPLICATION);
60 return permissionRepository.selectList(true, -1, -1, mapBean, null);
63 public PermissionTreeNode selectPermissionTree(String applicationId, String type) {
65 Map<String, Object> mapBean = new HashMap<String, Object>();
66 mapBean.put("type", type);
68 String rootTreeNodeId = "0";
70 List<Permission> permissions = new ArrayList<Permission>();
72 if (StringUtils.isBlank(applicationId)) {
73 Permission rootPermission = new Permission();
74 rootPermission.setId(Permission.ROOT_PARENT_ID);
75 rootPermission.setCode("root");
76 rootPermission.setName("根");
78 permissions.add(rootPermission);
79 rootTreeNodeId = rootPermission.getId();
81 List<Permission> applicationPermissions = this.selectApplicationPermissionList();
82 permissions.addAll(applicationPermissions);
84 Permission applicationPermission = permissionRepository.selectById(applicationId); // this.selectApplicationPermissionByCode(applicationCode);
85 if (applicationPermission == null) {
89 permissions.add(applicationPermission);
90 rootTreeNodeId = applicationPermission.getId();
93 List<Permission> menuPermissions = permissionRepository.selectList(true, -1, -1, mapBean, null);
94 permissions.addAll(menuPermissions);
96 return convertPermissionTree(permissions, rootTreeNodeId);
99 private PermissionTreeNode convertPermissionTree(List<Permission> permissions, String rootTreeNodeId) {
100 if (permissions == null || permissions.size() == 0) {
104 Map<String, PermissionTreeNode> parentTreeNode = new LinkedHashMap<String, PermissionTreeNode>();
106 for (Permission permission : permissions) {
107 PermissionTreeNode treeNode = EntityUtils.copy(permission, new PermissionTreeNode());
108 treeNode.setChildren(new ArrayList<PermissionTreeNode>());
110 if (parentTreeNode.containsKey(treeNode.getId())) {
113 parentTreeNode.put(treeNode.getId(), treeNode);
116 for (PermissionTreeNode treeNode : parentTreeNode.values()) {
117 if (!parentTreeNode.containsKey(treeNode.getParentId())) {
121 parentTreeNode.get(treeNode.getParentId()).getChildren().add(treeNode);
124 return parentTreeNode.get(rootTreeNodeId);
129 // public Permission selectApplicationPermissionByCode(String code) {
130 // Permission probe = new Permission();
131 // probe.setCode(code);
132 // probe.setType("1");
134 // ExampleMatcher matcher = ExampleMatcher.matching()
135 // .withMatcher("code", ExampleMatcher.GenericPropertyMatchers.exact())
136 // .withMatcher("type", ExampleMatcher.GenericPropertyMatchers.exact());
138 // Example<Permission> example = Example.of(probe, matcher);
140 // Optional<Permission> o = permissionRepository.findOne(example);
142 // if (o.isPresent()) {
150 public List<Permission> selectByUsername(String username, String applicationId, String type) {
151 List<Permission> permissions = new ArrayList<Permission>();
153 // Permission applicationPermission = permissionRepository.selectById(applicationId);
154 // if (applicationPermission == null) {
155 // return permissions;
158 // int lft = applicationPermission.getLft();
159 // int rgt = applicationPermission.getRgt();
161 if (StringUtils.isBlank(applicationId)) {
162 List<Permission> accountRolePermissions = permissionRepository.selectAccountRolePermissionByUsername(username, type);
163 permissions.addAll(accountRolePermissions);
165 List<Permission> accountGroupRolePermissions = permissionRepository.selectAccountGroupRolePermissionByUsername(username, type);
166 permissions.addAll(accountGroupRolePermissions);
168 List<Permission> accountRolePermissions = permissionRepository.selectAccountRolePermissionByUsername(username, applicationId, type);
169 permissions.addAll(accountRolePermissions);
171 List<Permission> accountGroupRolePermissions = permissionRepository.selectAccountGroupRolePermissionByUsername(username, applicationId, type);
172 permissions.addAll(accountGroupRolePermissions);
175 return EntityUtils.distinctList(permissions);
179 public PermissionTreeNode selectPermissionTreeByUsername(String username, String applicationId, String type) {
180 String rootTreeNodeId = "0";
182 List<Permission> permissions = new ArrayList<Permission>();
184 if (StringUtils.isBlank(applicationId)) {
185 Permission rootPermission = new Permission();
186 rootPermission.setId(Permission.ROOT_PARENT_ID);
187 rootPermission.setCode("root");
188 rootPermission.setName("根");
190 permissions.add(rootPermission);
191 rootTreeNodeId = rootPermission.getId();
193 List<Permission> applicationPermissions = this.selectApplicationPermissionList();
194 permissions.addAll(applicationPermissions);
196 Permission applicationPermission = permissionRepository.selectById(applicationId); // this.selectApplicationPermissionByCode(applicationCode);
197 if (applicationPermission == null) {
201 permissions.add(applicationPermission);
202 rootTreeNodeId = applicationPermission.getId();
205 List<Permission> menuPermissions = this.selectByUsername(username, applicationId, type);
206 permissions.addAll(menuPermissions);
208 return convertPermissionTree(permissions, rootTreeNodeId);