PermissionController.java 7.23 KB
package com.uccc.admin.controller;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.auth0.jwt.JWT;
import com.uccc.admin.domain.Permission;
import com.uccc.admin.domain.Role;
import com.uccc.admin.exception.ApiException;
import com.uccc.admin.service.PermissionService;
import com.uccc.admin.service.RoleService;
import com.uccc.admin.service.UserService;
import com.uccc.pretty.common.Result;
import com.uccc.pretty.common.SystemLog;
import com.uccc.pretty.common.User;
import com.uccc.pretty.constants.ErrorCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;

import static com.uccc.pretty.constants.ActionEnum.ROLE_CREATE;
import static com.uccc.pretty.constants.ActionEnum.ROLE_UPDATE;
import static com.uccc.pretty.constants.ActionEnum.USER_CREATE;
import static com.uccc.pretty.constants.ResultEnum.RESULT_ERR;
import static com.uccc.pretty.constants.ResultEnum.RESULT_OK;

/**
 * Created by bert on 2021-09-14 11:33
 */

@RestController
@RequestMapping("/permission/")
public class PermissionController {

    private Logger logger = LoggerFactory.getLogger(PermissionController.class);

    @Autowired
    private PermissionService permissionService;
    @Autowired
    private RoleService roleService;
    @Autowired
    private UserService userService;
    /**
     * permission tree struct
     * @return
     * @throws NullPointerException
     */
    @RequestMapping(value = "tree",method = RequestMethod.GET)
    public Result permissionTree(@RequestParam int type) throws NullPointerException{
        if (!(type == 1) && !(type ==2)) {
            throw new ApiException(ErrorCode.INVALID_PARAM);
        }
        Result result = new Result();
        JSONArray jsonArray;
        //only admin can watch tree struct
        List<Permission> permissions = permissionService.selectAllUserPermission(type);
        if (permissions.size() == 0) {
            throw new ApiException(ErrorCode.USER_PERMISSION_NOT_FOUND);
        }else {
            jsonArray = permissionService.formatPermissionList(permissions);
        }
        if (jsonArray.size() > 0) {
            result.setCode(RESULT_OK.getCode());
            result.setMessage(RESULT_OK.getMessage());
        }else {
            result.setCode(RESULT_ERR.getCode());
            result.setMessage(RESULT_ERR.getMessage());
        }
        result.setData(jsonArray);
        return result;
    }

    /**
     * create role and config role_permission
     * @param role
     * @return
     * @throws NullPointerException
     */
    @RequestMapping(value = "role",method = RequestMethod.POST)
    public Result createRole(@RequestBody Role role, @RequestParam String ip, HttpServletRequest request) throws NullPointerException{
        if (ip == null) throw  new ApiException(ErrorCode.IP_NOT_FOUND);
        Result result = new Result();
        if (role == null) throw new ApiException(ErrorCode.INVALID_PARAM);
        if (role.getPermission() == null) throw new ApiException(ErrorCode.INVALID_PARAM);
        if (role.getEnName() == null) throw new ApiException(ErrorCode.INVALID_PARAM);
        if (!(role.getPermission().length > 0)) throw new ApiException(ErrorCode.USER_PERMISSION_NOT_FOUND);
        if (role.getName() == null) throw new ApiException(ErrorCode.INVALID_PARAM);
        boolean repeat = roleService.getRoleNameRepeat(role.getName());
        if (repeat) throw new ApiException(ErrorCode.ROLE_EXISTED);
        int createRoleCount = roleService.createRole(role);
        if (createRoleCount > 0) {
            Role newRole = roleService.getRoleByName(role.getName());
            //create permission
            boolean addRolePermissionRes = permissionService.createRolePermission(role.getPermission(), newRole.getId());
            if (addRolePermissionRes) {
                result.setCode(RESULT_OK.getCode());
                result.setMessage(RESULT_OK.getMessage());
                String token = request.getHeader("token");
                String userId = JWT.decode(token).getAudience().get(0);
                SystemLog systemLog = new SystemLog(Long.parseLong(userId),ROLE_CREATE.getMessage(),ROLE_CREATE.getMessage(),new Date(),"create role result is: true",ip);
                userService.sendSystemLogToRabbitMq(JSONObject.toJSONString(systemLog));
            }else  {
                throw new ApiException(ErrorCode.ADD_FAILED);
            }
        }else {
            throw new ApiException(ErrorCode.ADD_FAILED);
        }
        return result;
    }

    /**
     * update role and config role_permission
     * @param role
     * @return
     * @throws NullPointerException
     */
    @RequestMapping(value = "role",method = RequestMethod.PUT)
    public Result updateRole(@RequestBody Role role, @RequestParam String ip, HttpServletRequest request) throws NullPointerException{
        if (ip == null) throw  new ApiException(ErrorCode.IP_NOT_FOUND);
        Result result = new Result();
        if (role.getId() == null) throw  new ApiException(ErrorCode.INVALID_PARAM);
        int updateRoleCount = roleService.updateRole(role);
        //根据role_id删除role_permission数据 重新添加
        if ( updateRoleCount > 0 ) {
            if (role.getPermission() != null) {
                if (role.getPermission().length > 0){
                    boolean res = permissionService.updateRolePermission(role.getId(), role.getPermission());
                    if (res) {
                        result.setCode(RESULT_OK.getCode());
                        result.setMessage(RESULT_OK.getMessage());
                        String token = request.getHeader("token");
                        String userId = JWT.decode(token).getAudience().get(0);
                        SystemLog systemLog = new SystemLog(Long.parseLong(userId),ROLE_UPDATE.getMessage(),ROLE_UPDATE.getMessage(),new Date(),"更新角色成功",ip);
                        userService.sendSystemLogToRabbitMq(JSONObject.toJSONString(systemLog));
                    }else {
                        throw new ApiException(ErrorCode.UPDATE_FAILED);
                    }
                }
            }else {
                result.setCode(RESULT_OK.getCode());
                result.setMessage(RESULT_OK.getMessage());
            }
        }else {
            throw new ApiException(ErrorCode.UPDATE_FAILED);
        }

        return result;
    }

    /**
     * get roleList
     * @param
     * @return
     * @throws NullPointerException
     */
    @RequestMapping(value = "roles",method = RequestMethod.GET)
    public Result getRoleList(@RequestParam(name = "name", required = false) String name) throws NullPointerException{
        Result result = new Result();
        List<Role> roles = roleService.getRoles(name);

        if (roles.size() > 0) {
            result.setCode(RESULT_OK.getCode());
            result.setMessage(RESULT_OK.getMessage());
            JSONObject json = new JSONObject();
            json.put("count", roles.size());
            json.put("rows", roles);
            result.setData(json);
        }else {
            throw new ApiException(ErrorCode.SEARCH_FAILED);
        }
        return result;
    }

}