2016-08-04 4 views
0

私のアプリに「general_user」ロールを設定しようとしているので、adminはユーザをそのロールから削除することを禁止できます。afterseaveのユーザとロールのparse-server set ACL

このコード:public read, user(write)のACLで

Parse.Cloud.afterSave(Parse.User, function(request, response) { 
var user = request.object; 
if (user.existed()) { return; } 

var roleQuery = new Parse.Query(CONSTANTS.ROLE_CLASSNAME); 
roleQuery.equalTo("name", CONSTANTS.GENERAL_USER_ROLENAME); 
roleQuery.first(CONSTANTS.USE_MASTER_KEY) 
    .then(function(generalUserRole) { 
     if(generalUserRole) 
     { 
      generalUserRole.getUsers().add(user); 
      return generalUserRole.save(); 
     } 
     else 
     { 
      var role = new Parse.Role(CONSTANTS.GENERAL_USER_ROLENAME, new Parse.ACL()); 
      role.getUsers().add(user); 
      return role.save(); 
     } 
    }).then(function(generalUserRole) { 
     var acl = new Parse.ACL(); 
     acl.setWriteAccess(user, true); 
     acl.setRoleReadAccess(generalUserRole, true); 
     req.object.setACL(acl); 
    }, 
    function(error) { 
     console.log(JSON.stringify(error)); 
    }); 
}); 

結果(ダッシュボードに読み込み)。

ACLを追加した後で、req.objectの保存を保存しようとしました。

私はres.success()の有無を問わず試しました(これはafterSavesでは必要ないと私は理解しています)。

ありがとうございます。

答えて

1

私はあなたのコードをテストし、いくつかの問題を見つけて修正しました。私が見つかった問題であった:あなたはあなたがあなたがACLを良くしたときresponse.success()

  • を記述する必要はありませんので、応答がafterSaveのみ要求で必要とされていない

    1. ユーザーが、あなたはuseMasterKeyで保存を実行する必要があるので、それは、変更内容を保存しません最後に保存を実行しない場合、あなたは...それを保存していない:変更内容を保存するために、真の

    終わりに、あなたのコードは次のようになります。

    Parse.Cloud.afterSave(Parse.User, function (req) { 
    
        var user = req.object; 
        if (user.existed()) { return; } 
    
        var roleQuery = new Parse.Query(Parse.Role); 
        roleQuery.equalTo("name", "someRole"); 
    
        roleQuery.first({ useMasterKey: true }).then(function (role) { 
    
         if (role) { 
          role.getUsers().add(user); 
          return role.save(); 
         } else { 
          var myNewRole = new Parse.Role("someRole", new Parse.ACL()); 
          myNewRole.getUsers().add(user); 
          return myNewRole.save() 
         } 
    
        }).then(function (userRole) { 
         var acl = new Parse.ACL(); 
         acl.setWriteAccess(user, true); 
         acl.setRoleReadAccess(userRole, true); 
         user.setACL(acl); 
         return user.save(null,{ useMasterKey: true }); 
        }, function (error) { 
         console.log(JSON.stringify(error)); 
        }); 
    
    }); 
    
  • +0

    あなたはそれが、私はそれが何か他のものでなければなりません実現働いたときに、私はこのようにそれを試していたし、それが動作しませんでした。だから私は、古いACLの)と私のParse.Userテーブル内のすべてのユーザーを削除し、すべて正常に働いた。ありがとうございました。 – MayNotBe

    +0

    Cool。それはあなたのために今働くことを幸せ –

    関連する問題