跳转至

获取角色下所有用户,或者用户下所有角色

本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a49n7ol8og

脚本说明

该脚本用于获取角色下的所有用户,或者获取用户下的所有角色。在MyApps平台中,用户和角色是多对多的关系,可以通过脚本查询这种关联关系。

获取角色下所有用户

方式1:根据角色名称获取用户

(function(){
    var roleName = "角色名称";
    var role = getRoleByName(roleName);

    if(role != null){
        var users = role.getUsers();
        var userIds = [];

        if(users != null && users.size() > 0){
            for(var i = 0; i < users.size(); i++){
                userIds.push(users.get(i).getId());
            }
        }

        return userIds.join(";");
    }

    return "";
})();

方式2:根据角色ID获取用户

(function(){
    var roleId = "角色ID";
    var role = getRoleById(roleId);

    if(role != null){
        var users = role.getUsers();
        var userList = [];

        if(users != null && users.size() > 0){
            for(var i = 0; i < users.size(); i++){
                var user = users.get(i);
                userList.push({
                    id: user.getId(),
                    name: user.getName(),
                    loginno: user.getLoginno()
                });
            }
        }

        return JSON.stringify(userList);
    }

    return "[]";
})();

方式3:通过SQL查询角色下的用户

(function(){
    var roleName = "角色名称";
    var sql = "SELECT u.id, u.name, u.loginno " +
              "FROM t_user u " +
              "INNER JOIN t_user_role ur ON u.id = ur.userid " +
              "INNER JOIN t_role r ON ur.roleid = r.id " +
              "WHERE r.name = '" + roleName + "'";

    var users = queryBySQL(sql);
    var userIds = [];

    if(users != null && users.size() > 0){
        for(var it = users.iterator(); it.hasNext();){
            var user = it.next();
            userIds.push(user.getId());
        }
    }

    return userIds.join(";");
})();

方式4:获取角色下用户并格式化

(function(){
    var roleName = "角色名称";
    var role = getRoleByName(roleName);

    if(role != null){
        var users = role.getUsers();
        var result = [];

        if(users != null && users.size() > 0){
            for(var i = 0; i < users.size(); i++){
                var user = users.get(i);
                result.push(user.getId() + "|" + user.getName());
            }
        }

        return result.join(";");
    }

    return "";
})();

获取用户下所有角色

方式1:根据用户名称获取角色

(function(){
    var userName = "用户名称";
    var user = getUserByName(userName);

    if(user != null){
        var roles = user.getRoles();
        var roleIds = [];

        if(roles != null && roles.size() > 0){
            for(var i = 0; i < roles.size(); i++){
                roleIds.push(roles.get(i).getId());
            }
        }

        return roleIds.join(";");
    }

    return "";
})();

方式2:根据用户ID获取角色

(function(){
    var userId = "用户ID";
    var user = getUserById(userId);

    if(user != null){
        var roles = user.getRoles();
        var roleList = [];

        if(roles != null && roles.size() > 0){
            for(var i = 0; i < roles.size(); i++){
                var role = roles.get(i);
                roleList.push({
                    id: role.getId(),
                    name: role.getName()
                });
            }
        }

        return JSON.stringify(roleList);
    }

    return "[]";
})();

方式3:获取当前用户的角色

(function(){
    var currentUser = getWebUser();
    var roles = currentUser.getRoles();
    var roleIds = [];

    if(roles != null && roles.size() > 0){
        for(var i = 0; i < roles.size(); i++){
            roleIds.push(roles.get(i).getId());
        }
    }

    return roleIds.join(";");
})();

方式4:通过SQL查询用户下的角色

(function(){
    var userId = "用户ID";
    var sql = "SELECT r.id, r.name " +
              "FROM t_role r " +
              "INNER JOIN t_user_role ur ON r.id = ur.roleid " +
              "WHERE ur.userid = '" + userId + "'";

    var roles = queryBySQL(sql);
    var roleIds = [];

    if(roles != null && roles.size() > 0){
        for(var it = roles.iterator(); it.hasNext();){
            var role = it.next();
            roleIds.push(role.getId());
        }
    }

    return roleIds.join(";");
})();

扩展示例

示例1:获取角色下所有用户(包含详细信息)

(function(){
    var roleName = "角色名称";
    var role = getRoleByName(roleName);

    if(role != null){
        var users = role.getUsers();
        var userList = [];

        if(users != null && users.size() > 0){
            for(var i = 0; i < users.size(); i++){
                var user = users.get(i);
                var department = user.getDepartment();
                userList.push({
                    id: user.getId(),
                    name: user.getName(),
                    loginno: user.getLoginno(),
                    departmentId: department != null ? department.getId() : "",
                    departmentName: department != null ? department.getName() : ""
                });
            }
        }

        return JSON.stringify(userList);
    }

    return "[]";
})();

示例2:获取用户下所有角色(包含角色描述)

(function(){
    var userId = "用户ID";
    var user = getUserById(userId);

    if(user != null){
        var roles = user.getRoles();
        var roleList = [];

        if(roles != null && roles.size() > 0){
            for(var i = 0; i < roles.size(); i++){
                var role = roles.get(i);
                roleList.push({
                    id: role.getId(),
                    name: role.getName(),
                    description: role.getDescription() || ""
                });
            }
        }

        return JSON.stringify(roleList);
    }

    return "[]";
})();

示例3:判断用户是否拥有指定角色

(function(){
    var userId = "用户ID";
    var roleName = "角色名称";
    var user = getUserById(userId);

    if(user != null){
        var roles = user.getRoles();

        if(roles != null && roles.size() > 0){
            for(var i = 0; i < roles.size(); i++){
                if(roles.get(i).getName() === roleName){
                    return true;
                }
            }
        }
    }

    return false;
})();

示例4:获取多个角色下的所有用户(去重)

(function(){
    var roleNames = ["角色1", "角色2", "角色3"];
    var allUserIds = [];

    for(var i = 0; i < roleNames.length; i++){
        var role = getRoleByName(roleNames[i]);
        if(role != null){
            var users = role.getUsers();
            if(users != null && users.size() > 0){
                for(var j = 0; j < users.size(); j++){
                    var userId = users.get(j).getId();
                    if(allUserIds.indexOf(userId) < 0){
                        allUserIds.push(userId);
                    }
                }
            }
        }
    }

    return allUserIds.join(";");
})();

示例5:获取角色下用户并统计

(function(){
    var roleName = "角色名称";
    var role = getRoleByName(roleName);

    if(role != null){
        var users = role.getUsers();
        var stats = {
            total: 0,
            active: 0,
            inactive: 0,
            users: []
        };

        if(users != null && users.size() > 0){
            stats.total = users.size();

            for(var i = 0; i < users.size(); i++){
                var user = users.get(i);
                var isActive = user.getState() == 1;  // 假设1表示激活

                if(isActive){
                    stats.active++;
                }else{
                    stats.inactive++;
                }

                stats.users.push({
                    id: user.getId(),
                    name: user.getName(),
                    active: isActive
                });
            }
        }

        return JSON.stringify(stats);
    }

    return "{}";
})();

示例6:获取用户角色并格式化输出

(function(){
    var userId = "用户ID";
    var user = getUserById(userId);

    if(user != null){
        var roles = user.getRoles();
        var roleNames = [];

        if(roles != null && roles.size() > 0){
            for(var i = 0; i < roles.size(); i++){
                roleNames.push(roles.get(i).getName());
            }
        }

        return roleNames.length > 0 ? roleNames.join("、") : "无角色";
    }

    return "用户不存在";
})();

示例7:通过参数动态获取

(function(){
    var type = getParameter("type");  // "role" 或 "user"
    var name = getParameter("name");

    if(type == null || name == null){
        return "参数错误";
    }

    if(type === "role"){
        // 获取角色下的用户
        var role = getRoleByName(name);
        if(role != null){
            var users = role.getUsers();
            var userIds = [];
            if(users != null && users.size() > 0){
                for(var i = 0; i < users.size(); i++){
                    userIds.push(users.get(i).getId());
                }
            }
            return userIds.join(";");
        }
    }else if(type === "user"){
        // 获取用户下的角色
        var user = getUserByName(name);
        if(user != null){
            var roles = user.getRoles();
            var roleIds = [];
            if(roles != null && roles.size() > 0){
                for(var i = 0; i < roles.size(); i++){
                    roleIds.push(roles.get(i).getId());
                }
            }
            return roleIds.join(";");
        }
    }

    return "";
})();

关键函数说明

角色相关函数

  • getRoleByName(roleName): 根据角色名称获取角色对象
  • getRoleById(roleId): 根据角色ID获取角色对象
  • role.getUsers(): 获取角色下的用户列表
  • role.getName(): 获取角色名称
  • role.getId(): 获取角色ID

用户相关函数

  • getUserByName(userName): 根据用户名称获取用户对象
  • getUserById(userId): 根据用户ID获取用户对象
  • getWebUser(): 获取当前登录用户对象
  • user.getRoles(): 获取用户下的角色列表
  • user.getName(): 获取用户名称
  • user.getId(): 获取用户ID
  • user.getLoginno(): 获取用户登录名
  • user.getDepartment(): 获取用户部门

SQL查询函数

  • queryBySQL(sql): 执行SQL查询并返回结果集
  • findBySQL(sql): 执行SQL查询并返回单条记录

数据库表结构说明

用户角色关联表 (t_user_role)

  • userid: 用户ID
  • roleid: 角色ID

用户表 (t_user)

  • id: 用户ID
  • name: 用户名称
  • loginno: 登录名
  • state: 用户状态

角色表 (t_role)

  • id: 角色ID
  • name: 角色名称
  • description: 角色描述

注意事项

  • ⚠️ 角色名称: 确保角色名称准确,区分大小写
  • ⚠️ 用户名称: 确保用户名称准确,区分大小写
  • ⚠️ 空值处理: 角色或用户可能不存在,需要判断
  • ⚠️ 关联关系: 用户和角色是多对多关系,一个用户可以有多个角色,一个角色可以包含多个用户
  • ⚠️ 性能优化: 如果数据量很大,建议使用SQL查询方式
  • ⚠️ 返回格式: 多个ID用分号(;)分隔
  • 可以通过角色对象获取用户列表
  • 可以通过用户对象获取角色列表
  • 也可以直接通过SQL查询关联表获取数据

使用场景

  • 根据角色获取用户列表,用于流程审批人设置
  • 根据用户获取角色列表,用于权限判断
  • 用户角色关系查询和管理
  • 权限控制和访问控制
  • 数据权限过滤

如需查看完整脚本代码,请访问源文档链接。