2016-11-11 12 views
0

これは、特定のユーザーが割り当てられた「ショップ」オブジェクトにアクセスすることを許可する方法に関する私のアプローチです。Firebase:ユーザーに応じて異なるセクションへのアクセス

func shopFetch() { 

     self.shop.removeAll() 
     let shopRef = FIRDatabase.database().reference().child("shop").child(someIDforShop).child("menu") 
     shopRef.observe(.childAdded, with: { (snapshot) in 

      if let dictionary = snapshot.value as? [String: AnyObject] { 

       let something1 = dictionary["some1"] 
       let something2 = dictionary["some2"] 

       let shopper = Shop(some1: something1, some2: something2) 
       self.shop.insert(shopper, at: 0) 

       self.collection.reloadData() 
      } 

      }, withCancel: nil) 

    } 

これらは

rules: { 
    "users": { 
    "$uid": { 
     ".read": "auth != null || auth.uid == $uid", 
     ".write": "auth != null && auth.uid == $uid", 
     "$yourShop": { 
      ".read": "true" 
    } 
    }, 

    "shop": { 
    "$yourShop": { 
     ".read": "root.child('users').child(auth.uid).child($yourShop).val() == true", 
     ".write": "root.child('users').child(auth.uid).child($yourShopManager).val() == true || root.child('users').child(auth.uid).child('isAdmin').val() == true" 
     } 
    }, 
} 

私のセキュリティルールあるのは、私は私のデータベースでこれを持っているとしましょう:

<app-name>: { 
    "shop": { 
     "shop1": { 
     "menu": { 
      "some1": "thing1", 
      "some2": "thing2" 
     } 
     }, 
     "shop2": { 
     "menu": { 
      "some1": "thing1", 
      "some2": "thing2" 
     } 
     }, 
     "shop3": { 
     "menu": { 
      "some1": "thing1", 
      "some2": "thing2" 
     } 
     }, 
     "users": { 
     "K4of4ofp32kfoE": { 
     "shop": { 
      "shop1": true 
     } 
     }, 
     "fj3i53ogF34oGf329ieQ": { 
     "shop": { 
      "shop2": true 
     } 
     }, 

} 

私はsomeIDforShoplet shopRefに何を書くべきですか? これを行うと、各ユーザーは自分の「ショップ」にアクセスできます。私はchildByAutoID()を試しました。ルールに指定されているように、ユーザーに関連するデータを取得するものと仮定しています。しかしは何も返しません。print(snapshot)

答えて

0

各ショップの変数名を各ユーザーに取得する方法を考え出しました。今、すべてのユーザーが彼/彼女の自身の個人的な 'お店' アイテムを受け取るshopFetch()

に>someIDforShop -

import UIKit 
import Firebase 

let shopVar = "" 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let userReference = DataService.instance.REF_USERS.child((user?.uid)!).child("shop") 
     userReference.observe(.value, with: { (snapshot) in  

     if let dict = snapshot.value as? [String:AnyObject] { 

       let shopName = dict["name"] as! String 
       print(shopName) 

       self.shopVar = shopName 

      } 

     }, withCancel: nil) 
} 

ルールは、その後、私はshopVarを交換

"users": { 
     "K4of4ofp32kfoE": { 
     "shop": { 
      "name": "coolShop" 
     } 
     }, 
     "fj3i53ogF34oGf329ieQ": { 
     "shop": { 
      "name": "fancyShop" 
     } 
     }, 
} 

を変更します。

関連する問題