获取角色下所有用户,或者用户下所有角色¶
本文档内容来源于 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(): 获取用户IDuser.getLoginno(): 获取用户登录名user.getDepartment(): 获取用户部门
SQL查询函数¶
queryBySQL(sql): 执行SQL查询并返回结果集findBySQL(sql): 执行SQL查询并返回单条记录
数据库表结构说明¶
用户角色关联表 (t_user_role)¶
userid: 用户IDroleid: 角色ID
用户表 (t_user)¶
id: 用户IDname: 用户名称loginno: 登录名state: 用户状态
角色表 (t_role)¶
id: 角色IDname: 角色名称description: 角色描述
注意事项¶
- ⚠️ 角色名称: 确保角色名称准确,区分大小写
- ⚠️ 用户名称: 确保用户名称准确,区分大小写
- ⚠️ 空值处理: 角色或用户可能不存在,需要判断
- ⚠️ 关联关系: 用户和角色是多对多关系,一个用户可以有多个角色,一个角色可以包含多个用户
- ⚠️ 性能优化: 如果数据量很大,建议使用SQL查询方式
- ⚠️ 返回格式: 多个ID用分号(;)分隔
- 可以通过角色对象获取用户列表
- 可以通过用户对象获取角色列表
- 也可以直接通过SQL查询关联表获取数据
使用场景¶
- 根据角色获取用户列表,用于流程审批人设置
- 根据用户获取角色列表,用于权限判断
- 用户角色关系查询和管理
- 权限控制和访问控制
- 数据权限过滤
如需查看完整脚本代码,请访问源文档链接。