系统只读用户的实现

需求:需要给定一个只读用户权限,顾名思义,该权限的用户只拥有读的操作,能看,能翻页看,各种看,但是不能执行操作,删除,修改,添加等能影响到后台数据的都不能进行操作。

思路:一开始想的是怎么在页面进行控制,通过后台传值,在页面进行判断,将按钮进行disable不能操作的设置,但是实现起来会比较复杂,需要每个接口进行传值,页面接收值并进行判断。

   后来跟同事沟通,发现其实也可以从后台进行控制,每个接口在最前边加一个判断,当是只读用户时,直接return,并返回信息,提示为只读用户,不能进行操作。这个实现起来相对来说简单很多,但是有个前提在用户登录时,保存在缓存中的用户信息,要保存角色的值,发起请求时需要在request中获取到当前用户的角色信息。实现代码如下:

@PostMapping(value = "/addWorkOrder")
    public JSONObject doAddWorkOrderForImp(@RequestBody String body, HttpServletRequest request) {
        if (ToolUtil.readOnly(request)){
            return ToolUtil.failResult("当前用户为只读权限,无法执行操作!");
        }
}
/**
     * 判断当前用户角色权限是否只读
     * @param request
     * @return
     */
    public static boolean readOnly(HttpServletRequest request){
        boolean readOnly = false;
        String token = request.getParameter("_token");
        if (StringUtils.isNotBlank(token)){
        //通过token获取当前登录用户的所有信息包括机构、角色等信息 JSONObject loginUser
= UserCache.getLoginUser(token); if (loginUser != null){ JSONObject role = loginUser.getJSONObject("role"); if (role != null){
            //这里需要注意了:需要在角色表添加一个字段,是否只读的字段,可以默认是非只读,这样就不会造成对之前数据的影响 String read_only
= role.getString("read_only"); //当read_only的值为1是则代表只读 if (StringUtils.equals(read_only,"1")){ readOnly = true; } } } } return readOnly; }
//返回信息的拼接
public
static JSONObject failResult(String errorMessage) { JSONObject result = new JSONObject(); result.put("code", 201); result.put("errorMessage", errorMessage); return result; }
原文地址:https://www.cnblogs.com/qcq0703/p/13613558.html