2 votes

Afficher différents contrôleurs de vue en fonction du rôle - Firebase, Swift 3

Je suis en train de construire une application assez simple qui envoie des rapports d'un utilisateur à un administrateur. Jusqu'à présent, j'ai fait tout le front-end. J'ai le menu qui fonctionne, et la séquence des rapports est transparente. Maintenant, il est temps pour moi de m'attaquer au back-end. Je suis un nouveau développeur Swift, complètement autodidacte (comme vous devriez l'être :) ) et je suis bloqué sur quelques points. J'ai juste besoin de conseils, j'ai utilisé stack overflow pour des conseils en lisant simplement mais je n'ai jamais posé de question. Donc ! ma question à vous, la communauté de stack godly, est la suivante :

J'ai deux rôles pour les utilisateurs..

  1. Un utilisateur normal
  2. Un administrateur

Je veux pouvoir, en fonction de leur rôle dans firebase, lorsqu'ils se connectent, les rediriger vers leur contrôleur de vue respectif. Maintenant, j'ai demandé à un de mes amis qui m'a dit qu'ils peuvent tous être faits dans la même application, je n'ai pas besoin de faire une application différente pour les administrateurs. Je suppose que c'est vrai parce que j'ai confiance en son jugement. Je pensais faire des contrôles if, c'est-à-dire

//If role is = to admin
self.performSegue(admin VC)

//else
self.performSegue(homeScreen)

J'ai des problèmes 1. pour assigner le rôle et 2. pour y accéder à partir de firebase !

Nous vous remercions de votre compréhension et de vos conseils.

Merci aux dieux du stack overflow

1voto

Jay Points 17499

Il s'agit d'un processus en deux étapes

La première étape consiste à authentifier l'utilisateur et à récupérer son identifiant.

Auth.auth().signIn(withEmail: "dude@thing.com", password: "password", 
  completion: { (auth, error) in

    if error != nil {
        let err = error?.localizedDescription
        print(err!)
    } else {
        print("succesfully authd")
        let uid = auth!.uid

        assignUserRole(uid)     
    }
})

Supposons que vous ayez un nœud standard d'utilisateurs qui contient des données supplémentaires sur les utilisateurs.

users
  uid_0
   fav_food: "pizza"
   user_role: "admin"
  uid_1
   fav_food: "tacos"
   user_role: "normal_user"

Étape 2 : la fonction assignUserRole sera ensuite appelée pour obtenir les informations sur l'utilisateur et configurer l'interface utilisateur.

function assignUserRole(theUid: String) {

   let thisUserRef = appRef.child("users").child(theUid)
   thisUserRef.observeSingleEvent(of: .value, with: { snapshot in
       let userDict = snapshot.value as! [String: Any]
       let favFood = userDict["fav_food"] as! String
       let userRole = userDict["user_role"] as! String
       print("  \(favFood)  \(userRole")

      if userRole == "admin" {
        //display admin viewController
      } else {
        //display normal user viewController
     }
   })
}

-1voto

Zach Fuller Points 195

Il est difficile de donner une réponse précise puisque votre question est plutôt large, mais quelque chose de ce genre devrait vous permettre d'atteindre votre objectif. Veillez simplement à remplacer les caractères de remplacement par les informations correctes :

//Fetch user role from Firebase DB
FIRDatabase.database().reference().child("PATH_TO_YOUR_USER_OBJECT").observeSingleEvent(of: .value, with: { (snapshot) in

    //Obtain value of user role
    let snapValue = snapshot.value as! [String:AnyObject]
    let userRole = snapValue["KEY_OF_USER_ROLE"] as! String

    //Set default vc in case of error
     var viewControllerID = "DEFAULT_VC_ID"

    //Set vc based on user role
    if userRole == "admin" {
        viewControllerID = "ADMIN_VC_ID"
    } else {
        viewControllerID = "USER_VC_ID"
    }

    //Instantiate correct vc and make it the root vc
    self.storyboard = UIStoryboard(name: "YOUR_STORYBOARD_NAME", bundle: Bundle.main)
    self.window?.rootViewController = self.storyboard?.instantiateViewController(withIdentifier: viewControllerID)
})

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X