【发布时间】:2016-09-01 16:14:50
【问题描述】:
我正在制作一个应用程序,它为团队创建流程来完成。这些进程的成员是可以写信给它们的管理员,然后是可以阅读它们的普通用户。当用户第一次创建进程时,默认情况下他们被设为管理员。但是,每当我尝试创建一个进程时,我都会从 Firebase 获得“权限被拒绝”,而我无法做到。我有基本相同的阅读规则(只是用“管理员”路径替换“用户”路径)并且我能够很好地阅读这些过程。只是无法制造它们。任何想法为什么会发生这种情况。
以下是进程的安全规则:
"processes": {
"$processID": {
".read": "auth.uid != null && data.child('users/' + auth.uid).val() === true",
".write": "auth.uid != null && newData.child('admins/' + auth.uid).val() === true"
}
}
这是进程的数据结构:
processes
-KQ_j5Yt75GktE5pBRFS
admins
HESy7LE7JbeNyHKaGeyWRhNIuE83: true
createdOn: "2016-09-01T04:00:00.000Z"
description: "This is an example process"
name: "Example Personal Process"
tasks
team: "-KQ_iwUmXsx0zasoPxT9"
users
HESy7LE7JbeNyHKaGeyWRhNIuE83: true
这是我创建进程的函数:
actions: {
createProcess(processName, processDescription) {
var teamId = this.controllerFor('processes/new').get('teamId');
var self = this;
console.log("team: "+teamId);
let currentUser = this.get('user').get('currentUser');
let team = this.get('store').peekRecord('team', teamId);
let user = this.get('store').peekRecord('user', currentUser.id);
console.log("user "+currentUser.id)
let process = this.get('store').createRecord('process', {
team: team,
user: user,
admin: user,
name: processName,
description: processDescription
});
user.get('processes').pushObject(process);
user.get('processesLead').pushObject(process);
team.get('processes').pushObject(process);
console.log("about to save process");
process.save().then(function () {
console.log(process.admin.id);
user.save();
console.log("user saved");
team.save();
console.log("team saved");
}).then(() => this.transitionTo('team', teamId));
}
这是我的用户模型的一部分。
processes: DS.hasMany('process'),
tasks: DS.hasMany('task'),
processesLead: DS.hasMany('process', { inverse: 'admins' }),
teamsLead: DS.hasMany('team', { inverse: 'admins' }),
tasksLead: DS.hasMany('task', { inverse: 'admins' }),
processMember: DS.hasMany('process', { inverse: 'members' }),
teamMember: DS.hasMany('team', { inverse: 'members' }),
taskMember: DS.hasMany('task', { inverse: 'members' })
这是我的流程模型的一部分:
users: DS.hasMany('user'),
admins: DS.hasMany('user', { inverse: 'processesLead' }),
members: DS.hasMany('user', { inverse: 'processMember' })
【问题讨论】:
-
显示代码,您写入数据库的位置
-
看在上帝的份上,用 UNIX 时间戳替换日期/时间字符串
-
刚刚添加的代码。 @DimaRostopira
-
等等,这是什么语言? 0_o JS?
-
是的,JS。我使用 Ember 作为框架。 @DimaRostopira
标签: firebase firebase-realtime-database firebase-security