2016-08-04 2 views
0

Я пытаюсь настроить роль «general_user» для моего приложения, чтобы администратор мог запретить пользователю удалять их из этой роли.parse-server set ACL для пользователя и роли в afterSave

Этот код:

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, что это public read, user(write) (Чтение в приборной панели).

Я попытался сохранить сохранение объекта req.ob после добавления ACL.

Я пробовал с res.success() (который, как я понимаю, не нужен в afterSave).

спасибо.

ответ

1

Я проверил ваш код и нашел некоторые проблемы и исправил их. Вопросы, которые я нашел, были:

  1. Ответ не требуется afterSave только запрос, так что вам не нужно писать response.success()
  2. Ты хорошо, когда вы установили ACL для пользователь, но вы не сохранили его .. если вы не будете работать сохранить в конце концов, это не сохранит изменения, так что вам нужно запустить сохранить с 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

Так что я попытался это так, и это не сработало, когда ты сказал, что работал я понял, что это должно быть что-то еще. Поэтому я удалил всех пользователей в моей таблице Parse.User (со старыми ACL), и тогда все сработало нормально. Спасибо. – MayNotBe

+0

Прохладный. Счастлив, что он работает для вас сейчас –

Смежные вопросы