boot-security/src/main/java/com/boot/security/server/controller/PermissionController.java

190 lines
5.3 KiB
Java
Raw Normal View History

2017-10-14 06:29:54 +00:00
package com.boot.security.server.controller;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.boot.security.server.dao.PermissionDao;
import com.boot.security.server.model.Permission;
import com.boot.security.server.model.SysUser;
import com.boot.security.server.service.PermissionService;
import com.google.common.collect.Lists;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
/**
*
*
* @author
*
*/
@Api(tags = "权限")
@RestController
@RequestMapping("/permissions")
public class PermissionController {
@Autowired
private PermissionDao permissionDao;
@Autowired
private PermissionService permissionService;
@ApiOperation(value = "当前登录用户拥有的权限")
@GetMapping("/current")
public List<Permission> permissionsCurrent() {// TODO
List<Permission> list = null;
if (list == null) {
list = new ArrayList<>();
SysUser user = new SysUser();
list = permissionDao.listByUserId(user.getId());
}
final List<Permission> permissions = list.stream().filter(l -> l.getType().equals(1))
.collect(Collectors.toList());
setChild(permissions);
return permissions.stream().filter(p -> p.getParentId().equals(0L)).collect(Collectors.toList());
}
private void setChild(List<Permission> permissions) {
permissions.parallelStream().forEach(per -> {
List<Permission> child = permissions.stream().filter(p -> p.getParentId().equals(per.getId()))
.collect(Collectors.toList());
per.setChild(child);
});
}
/**
*
*
* @param pId
* @param permissionsAll
* @param list
*/
private void setPermissionsList(Long pId, List<Permission> permissionsAll, List<Permission> list) {
for (Permission per : permissionsAll) {
if (per.getParentId().equals(pId)) {
list.add(per);
if (permissionsAll.stream().filter(p -> p.getParentId().equals(per.getId())).findAny() != null) {
setPermissionsList(per.getId(), permissionsAll, list);
}
}
}
}
@GetMapping
@ApiOperation(value = "菜单列表")
public List<Permission> permissionsList() {
List<Permission> permissionsAll = permissionDao.listAll();
List<Permission> list = Lists.newArrayList();
setPermissionsList(0L, permissionsAll, list);
return list;
}
@GetMapping("/all")
@ApiOperation(value = "所有菜单")
public JSONArray permissionsAll() {
List<Permission> permissionsAll = permissionDao.listAll();
JSONArray array = new JSONArray();
setPermissionsTree(0L, permissionsAll, array);
return array;
}
@GetMapping("/parents")
@ApiOperation(value = "一级菜单")
public List<Permission> parentMenu() {
List<Permission> parents = permissionDao.listParents();
return parents;
}
/**
*
*
* @param pId
* @param permissionsAll
* @param array
*/
private void setPermissionsTree(Long pId, List<Permission> permissionsAll, JSONArray array) {
for (Permission per : permissionsAll) {
if (per.getParentId().equals(pId)) {
String string = JSONObject.toJSONString(per);
JSONObject parent = (JSONObject) JSONObject.parse(string);
array.add(parent);
if (permissionsAll.stream().filter(p -> p.getParentId().equals(per.getId())).findAny() != null) {
JSONArray child = new JSONArray();
parent.put("child", child);
setPermissionsTree(per.getId(), permissionsAll, child);
}
}
}
}
@GetMapping(params = "roleId")
@ApiOperation(value = "根据角色id删除权限")
public List<Permission> listByRoleId(Long roleId) {
return permissionDao.listByRoleId(roleId);
}
@PostMapping
@ApiOperation(value = "保存菜单")
public void save(@RequestBody Permission permission) {
permissionDao.save(permission);
}
@GetMapping("/{id}")
@ApiOperation(value = "根据菜单id获取菜单")
public Permission get(@PathVariable Long id) {
return permissionDao.getById(id);
}
@PutMapping
@ApiOperation(value = "修改菜单")
public void update(@RequestBody Permission permission) {
permissionDao.update(permission);
}
/**
*
*
* @return
*/
@GetMapping("/owns")
@ApiOperation(value = "校验当前用户的权限")
public Set<String> ownsPermission() {// TODO
List<Permission> permissions = new ArrayList<>();
if (CollectionUtils.isEmpty(permissions)) {
return Collections.emptySet();
}
return permissions.parallelStream().filter(p -> !StringUtils.isEmpty(p.getPermission()))
.map(Permission::getPermission).collect(Collectors.toSet());
}
@DeleteMapping("/{id}")
@ApiOperation(value = "删除菜单")
public void delete(@PathVariable Long id) {
permissionService.delete(id);
}
}