mirror of https://github.com/elunez/eladmin
parent
8480f0e1d5
commit
7653da3d0d
|
@ -23,6 +23,6 @@ public class ElPermissionConfig {
|
|||
return true;
|
||||
}
|
||||
// 判断当前用户的所有权限是否包含接口上定义的权限
|
||||
return Arrays.stream(permissions).filter(elPermissions::contains).collect(Collectors.toList()).size() > 0;
|
||||
return Arrays.stream(permissions).anyMatch(elPermissions::contains);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import eu.bitwalker.useragentutils.UserAgent;
|
|||
import org.lionsoul.ip2region.DataBlock;
|
||||
import org.lionsoul.ip2region.DbConfig;
|
||||
import org.lionsoul.ip2region.DbSearcher;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Method;
|
||||
|
@ -13,6 +14,10 @@ import java.net.InetAddress;
|
|||
import java.net.UnknownHostException;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* 字符串工具类, 继承org.apache.commons.lang3.StringUtils类
|
||||
|
@ -179,4 +184,14 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
|
|||
}
|
||||
return weekDays[w];
|
||||
}
|
||||
|
||||
public static Set<String> findRoles(String roleStr) {
|
||||
// String line = "hasAnyRole('ROLE_ANONYMOUS') or hasAnyRole('kkjd','ddd') or @el.check('dept:list')";
|
||||
Set<String> roles = new HashSet<>();
|
||||
Matcher m = Pattern.compile("'([\\w:]+)'").matcher(roleStr);
|
||||
while (m.find()) {
|
||||
roles.add(m.group(1));
|
||||
}
|
||||
return roles;
|
||||
}
|
||||
}
|
|
@ -19,4 +19,6 @@ public interface MenuRepository extends JpaRepository<Menu, Long>, JpaSpecificat
|
|||
List<Menu> findByPid(long pid);
|
||||
|
||||
LinkedHashSet<Menu> findByRoles_IdAndTypeIsNotInOrderBySortAsc(Long id, Integer type);
|
||||
|
||||
List<Menu> findMenusByType(Integer type);
|
||||
}
|
||||
|
|
|
@ -78,6 +78,7 @@ public class MenuController {
|
|||
@PreAuthorize("@el.check('menu:list')")
|
||||
public ResponseEntity getMenus(MenuQueryCriteria criteria){
|
||||
List<MenuDTO> menuDTOList = menuService.queryAll(criteria);
|
||||
menuService.autoRegisterSysMenu();
|
||||
return new ResponseEntity<>(menuService.buildTree(menuDTOList),HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
|
|
@ -42,4 +42,6 @@ public interface MenuService {
|
|||
void delete(Set<Menu> menuSet);
|
||||
|
||||
void download(List<MenuDTO> queryAll, HttpServletResponse response) throws IOException;
|
||||
|
||||
void autoRegisterSysMenu();
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@ package me.zhengjie.modules.system.service.impl;
|
|||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import me.zhengjie.aop.log.Log;
|
||||
import me.zhengjie.modules.system.domain.Menu;
|
||||
import me.zhengjie.modules.system.domain.vo.MenuMetaVo;
|
||||
import me.zhengjie.modules.system.domain.vo.MenuVo;
|
||||
|
@ -22,9 +24,15 @@ import org.springframework.cache.annotation.CacheConfig;
|
|||
import org.springframework.cache.annotation.CacheEvict;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.method.HandlerMethod;
|
||||
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
@ -40,6 +48,8 @@ public class MenuServiceImpl implements MenuService {
|
|||
private final MenuMapper menuMapper;
|
||||
|
||||
private final RoleService roleService;
|
||||
@Resource
|
||||
private RequestMappingHandlerMapping requestMappingHandlerMapping;
|
||||
|
||||
public MenuServiceImpl(MenuRepository menuRepository, MenuMapper menuMapper, RoleService roleService) {
|
||||
this.menuRepository = menuRepository;
|
||||
|
@ -281,4 +291,36 @@ public class MenuServiceImpl implements MenuService {
|
|||
}
|
||||
FileUtil.downloadExcel(list, response);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void autoRegisterSysMenu() {
|
||||
Set<String> permissionCollect = menuRepository.findMenusByType(2).stream().map(it -> it.getPermission()).collect(Collectors.toSet());
|
||||
Map<RequestMappingInfo, HandlerMethod> handlerMethodMap = requestMappingHandlerMapping.getHandlerMethods();
|
||||
for (Map.Entry<RequestMappingInfo, HandlerMethod> infoEntry : handlerMethodMap.entrySet()) {
|
||||
HandlerMethod handlerMethod = infoEntry.getValue();
|
||||
PreAuthorize preAuthorize = handlerMethod.getMethodAnnotation(PreAuthorize.class);
|
||||
if (null != preAuthorize) {
|
||||
Set<String> roles = StringUtils.findRoles(preAuthorize.value());
|
||||
roles.forEach(role -> {
|
||||
if (!permissionCollect.contains(role)) {
|
||||
String apiOperation = "";
|
||||
ApiOperation operationAno = handlerMethod.getMethodAnnotation(ApiOperation.class);
|
||||
Log logAno = handlerMethod.getMethodAnnotation(Log.class);
|
||||
apiOperation = null != operationAno ? operationAno.value() : null != logAno ? logAno.value() : role;
|
||||
Menu registerMenu = new Menu();
|
||||
registerMenu.setPid(21L);
|
||||
registerMenu.setSort(999L);
|
||||
registerMenu.setType(2);
|
||||
registerMenu.setName("");
|
||||
registerMenu.setIFrame(false);
|
||||
registerMenu.setPermission("");
|
||||
registerMenu.setPermission(role);
|
||||
registerMenu.setName(String.format("%s(%s)", apiOperation, role) + "-自动注册");
|
||||
this.create(registerMenu);
|
||||
permissionCollect.add(role);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<#if column.changeColumnName != '${pkChangeColName}'>
|
||||
<el-form-item label="<#if column.columnComment != ''>${column.columnComment}<#else>${column.changeColumnName}</#if>" <#if column.columnKey = 'UNI'>prop="${column.changeColumnName}"</#if>>
|
||||
<#if column.columnType != 'Timestamp'>
|
||||
<el-input v-model="form.${column.changeColumnName}" :type="(form.${column.changeColumnName} && form.${column.changeColumnName}.length ) > 35 ? 'textarea': 'text'" style="width: 370px;"/>
|
||||
<el-input v-model="form.${column.changeColumnName}" style="width: 370px;"/>
|
||||
<#else >
|
||||
<el-date-picker type="datetime" v-model="form.${column.changeColumnName}" style="width: 370px;"/>
|
||||
</#if>
|
||||
|
|
Loading…
Reference in New Issue