跳转至

创建角色

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

脚本说明

该脚本用于创建角色。在MyApps平台中,可以通过脚本自动创建角色,包括设置角色名称、描述等属性。

常见实现方式

方式1:创建角色(基本方式)

(function(){
    var roleName = "角色名称";
    var roleDescription = "角色描述";
    var domainId = getWebUser().getDomainid();

    // 检查角色是否已存在
    var checkSql = "SELECT id FROM t_role WHERE name = '" + roleName + "' AND domainid = '" + domainId + "'";
    var existRole = findBySQL(checkSql);

    if(existRole != null){
        return "角色已存在: " + roleName;
    }

    // 创建角色对象
    var RoleProcess = getRoleProcess();
    var role = RoleProcess.doNew();

    role.setName(roleName);
    role.setDescription(roleDescription);
    role.setDomainid(domainId);

    // 保存角色
    RoleProcess.doCreate(role);

    return "角色创建成功: " + roleName + " (ID: " + role.getId() + ")";
})();

方式2:通过SQL直接插入角色

(function(){
    var roleName = "角色名称";
    var roleDescription = "角色描述";
    var domainId = getWebUser().getDomainid();

    // 检查角色是否已存在
    var checkSql = "SELECT id FROM t_role WHERE name = '" + roleName + "' AND domainid = '" + domainId + "'";
    var existRole = findBySQL(checkSql);

    if(existRole != null){
        return "角色已存在: " + roleName;
    }

    // 生成角色ID
    var roleId = createUUID();  // 假设有生成UUID的函数

    // 插入角色
    var insertSql = "INSERT INTO t_role (id, name, description, domainid) " +
                    "VALUES ('" + roleId + "', '" + roleName + "', '" + roleDescription + "', '" + domainId + "')";

    updateByDSName("数据源名称", insertSql);

    return "角色创建成功: " + roleName + " (ID: " + roleId + ")";
})();

方式3:创建角色并设置完整属性

(function(){
    var roleName = "角色名称";
    var roleDescription = "角色描述";
    var sortOrder = 0;
    var domainId = getWebUser().getDomainid();

    // 检查角色是否已存在
    var checkSql = "SELECT id FROM t_role WHERE name = '" + roleName + "' AND domainid = '" + domainId + "'";
    var existRole = findBySQL(checkSql);

    if(existRole != null){
        return "角色已存在: " + roleName;
    }

    // 创建角色
    var RoleProcess = getRoleProcess();
    var role = RoleProcess.doNew();

    role.setName(roleName);
    role.setDescription(roleDescription);
    role.setDomainid(domainId);
    role.setSortorder(sortOrder);

    RoleProcess.doCreate(role);

    return "角色创建成功: " + roleName;
})();

方式4:根据参数创建角色

(function(){
    var roleName = getParameter("roleName");
    var roleDescription = getParameter("roleDescription");

    if(roleName == null || roleName.trim().length == 0){
        return "错误: 请提供角色名称";
    }

    if(roleDescription == null){
        roleDescription = "";
    }

    var domainId = getWebUser().getDomainid();

    // 检查角色是否已存在
    var checkSql = "SELECT id FROM t_role WHERE name = '" + roleName + "' AND domainid = '" + domainId + "'";
    var existRole = findBySQL(checkSql);

    if(existRole != null){
        return "角色已存在: " + roleName;
    }

    // 创建角色
    var RoleProcess = getRoleProcess();
    var role = RoleProcess.doNew();

    role.setName(roleName);
    role.setDescription(roleDescription);
    role.setDomainid(domainId);

    RoleProcess.doCreate(role);

    return "角色创建成功: " + roleName;
})();

扩展示例

示例1:创建角色并返回角色ID

(function(){
    var roleName = "角色名称";
    var roleDescription = "角色描述";
    var domainId = getWebUser().getDomainid();

    // 检查角色是否已存在
    var checkSql = "SELECT id FROM t_role WHERE name = '" + roleName + "' AND domainid = '" + domainId + "'";
    var existRole = findBySQL(checkSql);

    if(existRole != null){
        return existRole.getId();  // 返回已存在的角色ID
    }

    // 创建角色
    var RoleProcess = getRoleProcess();
    var role = RoleProcess.doNew();

    role.setName(roleName);
    role.setDescription(roleDescription);
    role.setDomainid(domainId);

    RoleProcess.doCreate(role);

    return role.getId();  // 返回新创建的角色ID
})();

示例2:批量创建多个角色

(function(){
    var roles = [
        {name: "角色1", description: "角色1描述"},
        {name: "角色2", description: "角色2描述"},
        {name: "角色3", description: "角色3描述"}
    ];

    var domainId = getWebUser().getDomainid();
    var RoleProcess = getRoleProcess();
    var successCount = 0;
    var failCount = 0;
    var messages = [];

    for(var i = 0; i < roles.length; i++){
        var roleData = roles[i];
        var roleName = roleData.name;
        var roleDescription = roleData.description || "";

        try{
            // 检查角色是否已存在
            var checkSql = "SELECT id FROM t_role WHERE name = '" + roleName + "' AND domainid = '" + domainId + "'";
            var existRole = findBySQL(checkSql);

            if(existRole != null){
                messages.push("角色已存在: " + roleName);
                failCount++;
                continue;
            }

            // 创建角色
            var role = RoleProcess.doNew();
            role.setName(roleName);
            role.setDescription(roleDescription);
            role.setDomainid(domainId);

            RoleProcess.doCreate(role);

            messages.push("创建成功: " + roleName + " (ID: " + role.getId() + ")");
            successCount++;
        }catch(e){
            messages.push("创建失败: " + roleName + " - " + e.getMessage());
            failCount++;
        }
    }

    return "成功: " + successCount + ", 失败: " + failCount + "\n" + messages.join("\n");
})();

示例3:创建角色并验证

(function(){
    var roleName = "角色名称";
    var roleDescription = "角色描述";
    var domainId = getWebUser().getDomainid();

    // 验证角色名称不能为空
    if(roleName == null || roleName.trim().length == 0){
        return "错误: 角色名称不能为空";
    }

    // 验证角色名称长度
    if(roleName.length > 50){
        return "错误: 角色名称长度不能超过50个字符";
    }

    // 检查角色是否已存在
    var checkSql = "SELECT id FROM t_role WHERE name = '" + roleName + "' AND domainid = '" + domainId + "'";
    var existRole = findBySQL(checkSql);

    if(existRole != null){
        return "错误: 角色名称已存在: " + roleName;
    }

    // 创建角色
    var RoleProcess = getRoleProcess();
    var role = RoleProcess.doNew();

    role.setName(roleName);
    role.setDescription(roleDescription);
    role.setDomainid(domainId);

    RoleProcess.doCreate(role);

    return "角色创建成功: " + roleName + " (ID: " + role.getId() + ")";
})();

示例4:创建角色并记录日志

(function(){
    var roleName = "角色名称";
    var roleDescription = "角色描述";
    var domainId = getWebUser().getDomainid();
    var currentUser = getWebUser();

    println("开始创建角色: " + roleName);
    println("创建人: " + currentUser.getName());

    // 检查角色是否已存在
    var checkSql = "SELECT id FROM t_role WHERE name = '" + roleName + "' AND domainid = '" + domainId + "'";
    var existRole = findBySQL(checkSql);

    if(existRole != null){
        println("角色已存在: " + roleName);
        return "角色已存在: " + roleName;
    }

    try{
        // 创建角色
        var RoleProcess = getRoleProcess();
        var role = RoleProcess.doNew();

        role.setName(roleName);
        role.setDescription(roleDescription);
        role.setDomainid(domainId);

        RoleProcess.doCreate(role);

        println("角色创建成功: " + roleName + " (ID: " + role.getId() + ")");
        return "角色创建成功: " + roleName;
    }catch(e){
        println("创建失败: " + e.getMessage());
        return "创建失败: " + e.getMessage();
    }
})();

示例5:创建角色并返回完整信息

(function(){
    var roleName = "角色名称";
    var roleDescription = "角色描述";
    var domainId = getWebUser().getDomainid();

    // 检查角色是否已存在
    var checkSql = "SELECT id FROM t_role WHERE name = '" + roleName + "' AND domainid = '" + domainId + "'";
    var existRole = findBySQL(checkSql);

    if(existRole != null){
        return JSON.stringify({
            success: false,
            message: "角色已存在",
            roleId: existRole.getId()
        });
    }

    // 创建角色
    var RoleProcess = getRoleProcess();
    var role = RoleProcess.doNew();

    role.setName(roleName);
    role.setDescription(roleDescription);
    role.setDomainid(domainId);

    RoleProcess.doCreate(role);

    var result = {
        success: true,
        message: "角色创建成功",
        roleId: role.getId(),
        roleName: role.getName(),
        roleDescription: role.getDescription()
    };

    return JSON.stringify(result);
})();

示例6:创建角色并分配权限(示例)

(function(){
    var roleName = "角色名称";
    var roleDescription = "角色描述";
    var domainId = getWebUser().getDomainid();

    // 检查角色是否已存在
    var checkSql = "SELECT id FROM t_role WHERE name = '" + roleName + "' AND domainid = '" + domainId + "'";
    var existRole = findBySQL(checkSql);

    if(existRole != null){
        return "角色已存在: " + roleName;
    }

    // 创建角色
    var RoleProcess = getRoleProcess();
    var role = RoleProcess.doNew();

    role.setName(roleName);
    role.setDescription(roleDescription);
    role.setDomainid(domainId);

    RoleProcess.doCreate(role);

    // 分配权限(示例,具体API可能不同)
    // var permissions = ["权限1", "权限2", "权限3"];
    // role.setPermissions(permissions);
    // RoleProcess.doUpdate(role);

    return "角色创建成功: " + roleName + " (ID: " + role.getId() + ")";
})();

示例7:错误处理和异常捕获

(function(){
    var roleName = "角色名称";
    var roleDescription = "角色描述";
    var domainId = getWebUser().getDomainid();

    try{
        // 验证输入
        if(roleName == null || roleName.trim().length == 0){
            throw new Error("角色名称不能为空");
        }

        // 检查角色是否已存在
        var checkSql = "SELECT id FROM t_role WHERE name = '" + roleName + "' AND domainid = '" + domainId + "'";
        var existRole = findBySQL(checkSql);

        if(existRole != null){
            throw new Error("角色已存在: " + roleName);
        }

        // 创建角色
        var RoleProcess = getRoleProcess();
        var role = RoleProcess.doNew();

        role.setName(roleName);
        role.setDescription(roleDescription);
        role.setDomainid(domainId);

        RoleProcess.doCreate(role);

        return "角色创建成功: " + roleName + " (ID: " + role.getId() + ")";
    }catch(e){
        return "错误: " + e.getMessage();
    }
})();

示例8:创建角色并设置扩展属性

(function(){
    var roleName = "角色名称";
    var roleDescription = "角色描述";
    var sortOrder = 0;
    var isSystem = false;  // 是否系统角色
    var domainId = getWebUser().getDomainid();

    // 检查角色是否已存在
    var checkSql = "SELECT id FROM t_role WHERE name = '" + roleName + "' AND domainid = '" + domainId + "'";
    var existRole = findBySQL(checkSql);

    if(existRole != null){
        return "角色已存在: " + roleName;
    }

    // 创建角色
    var RoleProcess = getRoleProcess();
    var role = RoleProcess.doNew();

    role.setName(roleName);
    role.setDescription(roleDescription);
    role.setDomainid(domainId);
    role.setSortorder(sortOrder);
    // role.setSystem(isSystem);  // 如果支持设置系统角色

    RoleProcess.doCreate(role);

    return "角色创建成功: " + roleName;
})();

关键函数说明

  • getRoleProcess(): 获取角色处理对象
  • RoleProcess.doNew(): 创建新的角色对象
  • role.setName(name): 设置角色名称
  • role.setDescription(description): 设置角色描述
  • role.setDomainid(domainid): 设置域ID
  • role.setSortorder(order): 设置排序号
  • RoleProcess.doCreate(role): 保存角色
  • findBySQL(sql): 执行SQL查询并返回单条记录
  • updateByDSName(dsName, sql): 执行SQL更新语句
  • getWebUser().getDomainid(): 获取当前用户的域ID

角色创建说明

在MyApps平台中: - 角色名称: 通常要求唯一(在同一域内) - 角色描述: 可选,用于描述角色的用途 - 域ID: 角色属于特定的域,需要设置domainid - 权限分配: 创建角色后,通常需要分配权限(可能通过其他API实现)

注意事项

  • ⚠️ 角色名称: 确保角色名称唯一(在同一域内)
  • ⚠️ 域ID: 必须设置正确的domainid
  • ⚠️ 重复检查: 创建前建议检查角色是否已存在
  • ⚠️ 异常处理: 建议添加try-catch进行异常处理
  • ⚠️ 输入验证: 建议验证角色名称不能为空
  • 创建角色前建议检查角色名称是否已存在
  • 角色创建后可能需要分配权限
  • 建议添加输入验证和错误处理

使用场景

  • 初始化角色权限
  • 批量创建角色
  • 角色数据迁移
  • 自动化角色管理
  • 权限体系构建

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