2014-07-14 3 views
2

현재 "Parse"에있는 모든 User 개체에 "Administrator"역할을 할당하고 있습니다. 그러나, 내가 뭘하려고해도 400 오류가 발생합니다. 대시 보드를 통해 ACL에 수동으로 추가하려고하면 저장되지 않습니다. 예를 들어, "{"role : Administrator ": {"읽기 ": true"를 쓰고 ": true}}"를 입력하면 새로 고침시 되돌아갑니다 (정의되지 않음).Parse 400 Bad Request setACL

편집 : 그래서 Cloud Code 기능을 만들려고했습니다. 함수를 실행하려고 할 때 여전히 "결과 : 오류 : 정의되지 않은 권한이 없습니다"와 함께 400 오류가 발생합니다.

main.js (클라우드 코드) :

Parse.initialize("*****", "*****"); 
Parse.Cloud.define("modifyUser", function(request, response) { 
    if (!request.user) { 
     response.error("Must be signed in to call this Cloud Function.") 
    return; 
    } 

    // The rest of the function operates on the assumption that request.user is *authorized* 
    Parse.Cloud.useMasterKey(); 

    var query = new Parse.Query(Parse.User); 
    query.find({ 
     success: function(results) { 
     response.success("Successfully retrieved " + results.length + " scores."); 
     // Do something with the returned Parse.Object values 
     for (var i = 0; i < results.length; i++) { 
      var object = results[i]; 
      alert(object.id + ' - ' + object.get('objectId')); 
     } 
     }, 
     error: function(error) { 
      response.error("Error: " + error.code + " " + error.message); 
     } 
    }); 

}); 

내 클라이언트 측의 .js 파일 : $ (함수() { 을 console.log는 ("실행 대시 보드"); Parse.initialize ("**", "**");

Parse.Cloud.run('modifyUser', {username: "[email protected]"}, { 
     success: function(result) { 
     // result is 'Hello world!' 
     console.log(result); 
     }, 
     error: function(error) { 
      console.log("error: " + error.code + " " + error.message); 
     } 
    }); 
}); 

업데이트하기 전에 : 이상적으로, 내 자바 스크립트 파일에있는 모든 사용자 통해 루프에 좋아하고 FOLLO을 사용하여 자신의 역할을 업데이트 할 것 날개 코드 :

// set up ACL for User object 
var userACL = new Parse.ACL(); 
userACL.setRoleWriteAccess("Administrator", true); 
userACL.setRoleReadAccess("Administrator", true); 

// grab all Users 
var user_query = new Parse.Query(Parse.User); 
user_query.find({ 
    success: function(users) { 
     // querying all users works successfully 
     console.log(users); 
     // assign Administrator ACL to each user 
     for (var i=0; i<users.length; i++) { 
      users[i].setACL(userACL); 
      users[i].save(null, { 
       success: function(user) { 
        console.log("save successfully"); 
       }, 
       error: function(error) { 
        console.log("error saving: " + error.code + " " + error.message); 
       } 
      }); 
     } 
    }, 
    error: function(error) { 
     console.log("error: " + error.code + " " + error.message); 
    } 
}); 

그러나,이 반환 다음 POST https://api.parse.com/1/classes/_User/userIDhere (400) 내 사용자가 아래에 나열되어 있지만 나는, "사용자 개체가 다른 사용자의 쓰기를 허용 할 수 없습니다"와 함께 저장하려고 각 사용자에 대한 (잘못된 요청) 관리자 역할.

도움을 주시면 감사하겠습니다.

+0

몇 가지 .. ACL에 대한 게시물에 나열한 JSON이 유효하지 않아 닫는'}'이 (가) 없습니다. 둘째, 이러한 유형의 작업에는 다른 사용자를 대상으로 마스터 키를 사용해야합니다. 이 기능을 클라우드 코드로 작성 하시겠습니까? 마디? – Fosco

+0

@Fosco 응답 해 주셔서 감사합니다. 나는 당신의 충고를 따랐지만 여전히 오류를 받았다. 메인 포스트가 업데이트되었습니다. 또한 누락 된 JSON 괄호는 SO에 대한 오타였습니다. 대시 보드에서 여전히 업데이트 할 수 없습니다. – mattste

+0

이렇게하면 사용자가 자신의 사용자 개체에 액세스 할 수 없으므로 거부해야합니다. 충분한 해결책은 데이터 브라우저 (더보기 드롭 다운 아래)에서 클래스 찾기 권한을 설정하여 찾기/업데이트/삭제를 관리 역할로 제한하는 것입니다. – Fosco

답변

3

좋아요, 제 문제를 해결했습니다. Cloud Code 함수에서 Parse.initialize를 사용하면 안되며 useMasterKey와 함께 사용할 수 없습니다. 다음은 내가이 문제를 발견 한 링크입니다. https://www.parse.com/questions/usemasterkey-and-modifying-user-results-in-unauthorized

이것은 실제로 클라우드 코드 문서에 있어야합니다.

+0

불충분 한 Parse 문서에는 많은 것들이 있어야합니다! – rashadb

관련 문제