golang

用户、角色、权限管理系统(二)

2018-05-27  本文已影响879人  根艮哏艮根

本文版权归作者和简书共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

我们接着上篇继续来讲

为用户分配角色

为用户分配角色的时候需要注意的点为:
1.分配的时候需要将用户id和角色id存到对应的用户角色关联表中;
2.删除用户的时候可以选择将用户删除并且将用户角色表中的信息也对应删除,也可以不删除;
3.每次分配、修改的时候我们需要将用户角色表中对应的记录先删除,然后在重新去添加记录
4.这里面先对数据库存在的数据删除,然后在去添加新数据,就需要用到JFinal中的事务管理,假如删除数据库中的数据成功,但是添加的数据确成功了,这样的话会发生回滚,即恢复至没有操作数据之前的状态
5.每次点击分配角色的时候需要先查询此用户已经分配的角色,并且进行回显操作。

Controller层代码

/**
     * 为用户分配角色table数据源
     * 
     * @throws ParseException
     */
    @SuppressWarnings("unchecked")
    public void allotRoleTable() {
        String userId = getPara("userId");
        // 查询用户已有的角色进行回显
        userExistRole = (List<Record>) userService.queryUserRole(userId);
        // 查询角色名称列表
        List<Role> roles = (List<Role>) roleService.queryRoleName();
        JsonBeanUtils jsonBean = null;
        List<JsonBeanTableChecked> lists = new ArrayList<>();
        for (int i = 0; i < roles.size(); i++) {
            Role role = roles.get(i);
            JsonBeanTableChecked jsonBeans = new JsonBeanTableChecked();
            jsonBeans.setId(role.getId());
            jsonBeans.setRoleName(role.getRoleName());
            jsonBeans.setRoleDescript(role.getRoleDescript());
            for (int j = 0; j < userExistRole.size(); j++) {
                if ((userExistRole.get(j).get("roleid") == role.getId())) {
                    jsonBeans.setLayChecked(true);
                    // 当一次循环里面存在数据的时候,就跳出循环开始下一次循环
                    break;
                } else {
                    jsonBeans.setLayChecked(false);
                }
            }
            lists.add(jsonBeans);
        }

        // 返回封装的json字符串
        if (lists != null) {
            jsonBean = new JsonBeanUtils();
            jsonBean.setCode(0);
            jsonBean.setCount(lists.size());
            jsonBean.setData(lists);
        }
        if (jsonBean != null) {
            renderJson(jsonBean);
        }
    }

    /**
     * 为用户分配角色
     * 
     * @throws ParseException
     */
    public void allotRole() {
        String jsonStr = getPara("data");
        String userId=getPara("userId");
        List<Role> role = JSON.parseArray(jsonStr, Role.class);
        User user = userService.queryUserById(userId);
        Map<String, Object> map = new HashMap<>();
        if (role.size() > 0 && user != null) {
            if ((boolean) userService.allotRote(user, role)) {
                map.put("state", 200);
            } else {
                map.put("state", 400);
            }
        } else {
            map.put("state", 400);
        }

        renderJson(map);

    }

Service层代码


/**
     * 为用户分配角色
     * 
     * @param user
     * @param roles
     * @return
     */
    @Before(Tx.class)
    public Object allotRote(User user, List<Role> roles) {
        try {
            // 删除数据
            userRoleDao.delAllotRole(user.getId(),-1);
            // 插入表中
            UserRole userRole = null;
            for (Role role : roles) {
                userRole = new UserRole();
                userRole.setUserId(user.getId());
                userRole.setRoleId(role.getId());
                userRoleDao.allotRole(userRole);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("数据库操作失败,失败原因:" + e.getMessage());
            return false;
        }
        System.out.println("数据库操作成功");
        return true;
    }

Dao层代码

/**
     * 查询用户已有的角色进行回显
     * 
     * @param user
     * @return
     */
    public Object queryUserRole(String userId) {
        // 三张表联合查询
        String sql = "select u.user_name,u.id as userid,r.role_name,r.id as roleid "
                + "from t_user u,t_role r,t_user_role s where u.id=s.user_id "
                + "and s.role_id=r.id and u.id=?";
        return Db.find(sql, userId);
    }

为角色分配权限的设计思想与分配角色大致一样,都是这个套路。
其他功能的代码请看项目

项目源码以上传到CSDN,需要的小伙伴可以去下载,源码传送门

上一篇 下一篇

猜你喜欢

热点阅读