Вот чего я пытаюсь достичь, но почему-то я застрял, и я не уверен, что уместно, я не могу найти хороших примеров такого случая, поэтому я Я ищу вашу помощь.parse.com унаследовал ACL + роли - afterSave или beforeSave, сложный сценарий
Каждый зарегистрированный пользователь может добавить новый объект в класс «Список». После создания нового элемента я вызываю функцию afterSave и назначаю правильный ACL, создающий новую роль ("membersOf_" + List.id). Затем пользователь может добавить новый объект в класс «Элементы», который будет хранить List.id в качестве ссылки, а ACL для элемента должен быть унаследован из списка. Списки и элементы могут делиться между несколькими пользователями по своему выбору. Есть несколько проблем, в таком случае:
- при создании нового списка, нужно создать новую роль и назначить создатель к нему и добавить такую роль в созданный список
- при создании нового пункта, мне нужно передать список .id как полезную нагрузку и проверять с облачным кодом, если текущий пользователь может создать такой элемент (назначенный указанному списку), сначала проверив, имеет ли он соответствующие разрешения для списка
- , если проверка доступа в порядке, мне нужно предоставить этому элементу тот же ACL как Список имеет и продолжать с сохранением
Вот мой afterSa ve для List, правильно создавая роль и назначая ACL для объекта List. (1) я пропускаю добавление этой роли пользователя (создатель)
Parse.Cloud.afterSave("List", function(request, response) {
var list = request.object;
var user = Parse.User.current();
if (list.existed()) {
// quit on update, proceed on create
return;
}
var roleName = "membersOf_" + list.id;
var listRole = new Parse.Role(roleName, new Parse.ACL(user));
return listRole.save().then(function(listRole) {
var acl = new Parse.ACL();
acl.setPublicReadAccess(false);
acl.setPublicWriteAccess(false);
acl.setReadAccess(listRole, true);
acl.setWriteAccess(listRole, true);
var itemData = new Parse.Object("List", {
ACL: acl
});
return itemData.save('objectId', list.id);
});
// to do - add user to this role too
});
Вот мой Пункт BeforeSave, чтобы проверить, если пользователь может действительно создать такой объект, я проверяю, если он может запросить таблицу списка, если он получает> 0 результатов для такого списка, что означает, что он будет нормально добавлять объект, назначенный этому списку. (2) Отсутствует наследование ACL
Parse.Cloud.beforeSave("Item", function(request, response) {
var item = request.object;
var listId = request.object.get("list");
var user = Parse.User.current();
var List = Parse.Object.extend("List");
var query = new Parse.Query(List);
query.equalTo("objectId", listId);
query.first({
success: function(list) {
if (list.id) {
response.success();
}
else {
response.error('No such list or you don\'t have permission to perform this operation.');
}
},
error: function(error) {
response.error(error);
}
});
});
Может кто-нибудь указать мне на правильное решение или помочь решить эту загадку? Я не хватает двух вещей: - (1) Мне нужно, чтобы добавить пользователя (создатель) к новой роли, созданной в afterSave - (2) Мне нужно добавить тот же ACL к пункту, наследуют его от объекта List
I пробовали много вещей, передавая ACL в afterSave для Item, изменяя полезную нагрузку в beforeSave. Множество различных функций после документации и разных примеров, но до сих пор не повезло. Любые советы были бы замечательными!
привет @lokers, другой путь был бы назвать «вар = list.getACL ACL(); itemData.setACL (ACL);» – matus