1

我有代码可以为用户从 Rally 中删除访问权限

我们有大约 2000 个拉力赛项目

我实现了以下逻辑

  • 从 csv 文件中读取用户列表
  • 遍历每个用户
  • 获取用户的项目权限 url - 写入文本文件
  • 读取用户权限 - 循环
  • 删除访问权限

    try {
    
        QueryRequest usrRequest = new QueryRequest("User");
        usrRequest.setLimit(9999);
        usrRequest.setFetch(new Fetch("FirstName","LastName","UserName","UserPermissions"));
        usrRequest.setQueryFilter(new QueryFilter("UserName", "=", userID));
        BufferedWriter bw = new BufferedWriter(fw);
    
        QueryResponse usrResp = restApi.query(usrRequest);
    
        if (usrResp.wasSuccessful()) {
    
            for (JsonElement result : usrResp.getResults()) {
    
                JsonObject usrJson = result.getAsJsonObject();
    
                try {
    
                    userName = usrJson.get("UserName").getAsString();
    
                    if (userName.contains(userID)){
    
                        String userRef = usrJson.get("_ref").getAsString();
                        GetRequest userRequest = new GetRequest(userRef);
                        GetResponse userResponse = restApi.get(userRequest);
                        JsonObject userObj = userResponse.getObject();
    
                        JsonArray userPermArray = userObj.get("UserPermissions").getAsJsonArray();
    
                        for (int iter=0; iter<userPermArray.size(); iter++){
    
                            JsonObject prjPerm = userPermArray.get(iter).getAsJsonObject();
    
                            if (prjPerm.get("_type").getAsString().equalsIgnoreCase("ProjectPermission")){
                                tmp = prjPerm.get("_refObjectName").getAsString();
                                strArrray = tmp.split(" ");
                                last=strArrray[strArrray.length-1];
                                prjName = tmp.substring(0, tmp.length() - last.length()); 
                                prjRef = prjPerm.get("_ref").getAsString();
    
                                if (prjName.trim().equalsIgnoreCase("MyLogins Default")){}
                                else{
                                    //if the project permission is not editor then add that project
                                    if((checkUserStatusToThisProject(restApi, prjRef, userRef))){
                                        //prjPermList.put(prjName.trim(), prjRef);
                                        bw.write(prjName.trim()+"="+prjRef.trim());
                                        bw.newLine();
                                        //
                                    }
                                }
                            }
    
                        } // end of for loop
    
                    } // end of if
    
                }catch (Exception e) {
                    log.info("Error in fetching project list for user to remove : "+e.getStackTrace());
                    // TODO: handle exception
                }
            }// end of for loop
    
        } // end of if
    
        bw.close();
    }catch (Exception e) {
        e.printStackTrace();
    }
    
  • 上面的代码对于 4 个用户需要 3 个小时

  • 我相信我在获取用户项目权限列表时犯了一些错误

  • 在 checkUserStatusForThisProject 函数中 - 我正在检查该用户对该项目的角色类型?- 如果他是观众,那么我必须删除,否则(编辑)没有。

我的逻辑正确吗?或任何其他快速删除访问权限的方法?

请帮助

谢谢VG

4

0 回答 0