【问题标题】:role based authorization and role based access control flutter基于角色的授权和基于角色的访问控制颤动
【发布时间】:2020-06-22 07:24:55
【问题描述】:

我试图做的是设置一个基于角色的授权(普通用户和订阅用户),并基于角色用户被重定向到不同的屏幕。 我被困住了。我尝试了不同的解决方案,并查看了有关该概念的每个教程。我理解这个概念是如何工作的,但是很难在我的代码中设置它。我不确定在哪里声明订阅用户以及如何创建函数以及如何导航它们! 非常感谢任何帮助! 这就是我的代码的样子!

//这是我的认证服务

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

【问题讨论】:

  • “我理解这个概念是如何工作的,但是很难在我的代码中设置它。”由于您的代码没有显示任何有关用户角色的信息,因此很难提供帮助。你问的是什么具体的代码?如果做不到这一点,我建议查看youtube.com/watch?v=oFlHzF5U-HA
  • 他坦率地说。谢谢您的答复!我用我的用户模型更新了问题。老实说,我不确定如何定义用户角色。
  • 在这种情况下,视频将是一个很好的起点。存储角色信息的两个最常见位置是:1) 作为该用户的 Firebase 身份验证令牌中的自定义声明,2) 在与该用户关联的文档中的数据库中。无论您选择哪一个,您都应该在受信任的环境(您的开发机器、您控制的服务器或云功能)中设置此角色,否则任何人都可以更改自己的角色。
  • 你试过了吗:github.com/casbin/casbin-dart

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


【解决方案1】:

两个最常见的存储角色信息的地方是:

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

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

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

另见:

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 2010-09-11
    • 1970-01-01
    • 2014-01-25
    • 2017-12-14
    • 2017-04-12
    • 2018-07-21
    • 1970-01-01
    相关资源
    最近更新 更多