基于角色的授权和基于角色的访问控制

时间:2020-03-10 11:42:30

标签: flutter google-cloud-firestore firebase-authentication

我想做的是设置基于角色的授权(必需的用户和订阅的用户),并根据角色将用户重定向到不同的屏幕。 我很困香港专业教育学院尝试了不同的解决方案,并看到每一个教程都有关于这个概念。我了解该概念的工作原理,但是很难在我的代码中进行设置。我不确定在哪里声明订阅的用户,以及如何创建函数以及如何导航他们! 非常感谢您的帮助! 这就是我的代码的样子!

//这是我的身份验证服务

 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);
    }
  }

//我的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
  });

2 个答案:

答案 0 :(得分:0)

存储角色信息的两个最常见的位置是:

  1. 作为该用户在Firebase身份验证令牌中的custom claim
  2. 数据库中与该用户关联的文档中的

无论选择哪个人,都应该在受信任的环境(您的开发机器,您控制的服务器或Cloud Functions)中设置此角色,否则任何人都可以更改自己的角色。

在这两个位置之一中进行设置后,您可以访问客户端代码中的角色信息,并导航到该用户的正确屏幕。

另请参阅:

答案 1 :(得分:-2)

@Error Place 有一个示例 Flutter 架构正好可以解决这个问题。

这是相同的链接:Role based login architecture

我已经多次尝试和测试过它,它的作用就像一个魅力。此外,当用户角色发生变化时,您将无法访问以前用户的信息(这有助于数据保护和隐私问题)。