авторизация на основе ролей и контроль доступа на основе ролей - PullRequest
0 голосов
/ 10 марта 2020

я пытаюсь настроить авторизацию на основе ролей (регулярные пользователи и подписанные пользователи) и на основе ролей, которые пользователи перенаправляют на разные экраны. Я застрял. Я пробовал разные решения и видел каждый учебник о концепции. я понимаю, как работает эта концепция, но мне очень трудно настроить ее в своем коде. Я не уверен, где объявить подписанных пользователей и как создать функцию и как их перемещать! благодарен за любую помощь! так выглядит мой код!

// это мои службы авторизации

 static void signUpUser(
  BuildContext context, String name, String email, String password) async {
try {
  AuthResult authResult = await _auth.createUserWithEmailAndPassword(
      email: email,
      password: password
  );
  FirebaseUser signedInUser = authResult.user;
  if (signedInUser != null) {
    _firestore.collection('/users').document(signedInUser.uid).setData({
      'name': name,
      'email': email,
      'profileImageUrl': '',
    });

// страница регистрации

    final _formKey = GlobalKey<FormState>();
  String _name, _email, _password;

  _submit() {
    if(_formKey.currentState.validate()){
      _formKey.currentState.save();

      AuthService.signUpUser(context, _name, _email, _password);
    }
  }

// my main.dart

 Widget _getScreenId() {
    return StreamBuilder<FirebaseUser>(
      stream: FirebaseAuth.instance.onAuthStateChanged,
      builder: (BuildContext context, snapshot) {
        if (!snapshot.hasData) {
          Provider.of<UserData>(context).currentUserId = snapshot.data.uid;
          return LoginScreen();
        } else {
          return HomeScreen();
        }
      },
    );
  }

// импорт пользовательских моделей 'package: cloud_firestore / cloud_firestore.dart';

class User {
  final String id;
  final String name;
  final String profileImageUrl;
  final String email;
  final String bio;

  User({
    this.id,
    this.name,
    this.profileImageUrl,
    this.email,
    this.bio
  });

1 Ответ

0 голосов
/ 10 марта 2020

Два наиболее распространенных места для хранения информации о роли:

  1. в качестве пользовательской заявки в маркере аутентификации Firebase для этого пользователя,
  2. в база данных в документе, связанном с этим пользователем.

Независимо от того, какую из них вы выберете, вы должны установить эту роль в доверенной среде (на вашей машине разработки, на сервере, которым вы управляете, или в облачных функциях), так как в противном случае каждый может изменить свою собственную роль.

После установки в любом из этих местоположений вы можете получить доступ к информации о роли в коде на стороне клиента и перейти к правильному экрану для этого пользователя.

Также см .:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...