Firebase 规则,仅限参与用户访问
Firebase rules, limiting access to only participating users
正在尝试实施,以便用户只能访问用户正在玩的游戏的游戏数据。
基本上,如果用户是播放器列表的一部分,则用户应该能够阅读。我有所有 $GameID 中的参与玩家列表。
所有用户都有自己唯一的用户名,存储在用户 -> FirebaseID -> 用户名值下。
在用户所属的 $GameID 中模拟阅读儿童时,我可以获得以下功能,但当我在我的应用程序中尝试精简版时,它不会授予用户访问权限。
应用内调用:
GamesDataDatabase = FirebaseDatabase.getInstance().getReference("Games");
GamesDataDatabase.limitToFirst(50).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
......
规则:
"Games": {
"$GameID": {
".read": "root.child('Games').child($GameID).child('metaData').child('players').child(root.child('Users').child(auth.uid).child('username').val()).exists()",
如果我将 "data" 替换为 root.child('Games').child($GameID)
似乎没有任何区别
数据结构:
反复尝试但似乎无法使该规则生效...:(
问题从这里代码开始:
GamesDataDatabase = FirebaseDatabase.getInstance().getReference("Games");
GamesDataDatabase.limitToFirst(50).addListenerForSingleValueEvent(...
此代码仅在用户具有 /Games
的读取权限时才有效。如果他们没有 /Games
的读取权限,它将失败并显示 "permission denied".
结合您无法取消较低级别的权限这一事实,这意味着您无法使用 Firebase 安全规则来过滤数据。
这称为 "rules are not filters" in the Firebase documentation, and is a common source of confusion for developers who are new to Firebase's security model. I recommend that you study some of the previous questions and answers 以了解更多信息。
正在尝试实施,以便用户只能访问用户正在玩的游戏的游戏数据。 基本上,如果用户是播放器列表的一部分,则用户应该能够阅读。我有所有 $GameID 中的参与玩家列表。 所有用户都有自己唯一的用户名,存储在用户 -> FirebaseID -> 用户名值下。
在用户所属的 $GameID 中模拟阅读儿童时,我可以获得以下功能,但当我在我的应用程序中尝试精简版时,它不会授予用户访问权限。
应用内调用:
GamesDataDatabase = FirebaseDatabase.getInstance().getReference("Games");
GamesDataDatabase.limitToFirst(50).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
......
规则:
"Games": {
"$GameID": {
".read": "root.child('Games').child($GameID).child('metaData').child('players').child(root.child('Users').child(auth.uid).child('username').val()).exists()",
如果我将 "data" 替换为 root.child('Games').child($GameID)
似乎没有任何区别数据结构:
反复尝试但似乎无法使该规则生效...:(
问题从这里代码开始:
GamesDataDatabase = FirebaseDatabase.getInstance().getReference("Games");
GamesDataDatabase.limitToFirst(50).addListenerForSingleValueEvent(...
此代码仅在用户具有 /Games
的读取权限时才有效。如果他们没有 /Games
的读取权限,它将失败并显示 "permission denied".
结合您无法取消较低级别的权限这一事实,这意味着您无法使用 Firebase 安全规则来过滤数据。
这称为 "rules are not filters" in the Firebase documentation, and is a common source of confusion for developers who are new to Firebase's security model. I recommend that you study some of the previous questions and answers 以了解更多信息。