Flutter 基于角色的授权和基于角色的访问控制
我试图做的是设置一个基于角色的授权请求用户和订阅用户,并根据角色将用户重定向到不同的屏幕。 我被卡住了。我尝试了不同的解决方案,并且看到了每个关于这个概念的教程。我理解这个概念是如何工作的,但在我的代码中设置它确实很困难。我不知道在哪里声明订阅的用户,如何创建函数以及如何导航他们! 非常感谢您的帮助! 这就是我的代码的外观 //这是我的身份验证服务Flutter 基于角色的授权和基于角色的访问控制,flutter,google-cloud-firestore,firebase-authentication,Flutter,Google Cloud Firestore,Firebase Authentication,我试图做的是设置一个基于角色的授权请求用户和订阅用户,并根据角色将用户重定向到不同的屏幕。 我被卡住了。我尝试了不同的解决方案,并且看到了每个关于这个概念的教程。我理解这个概念是如何工作的,但在我的代码中设置它确实很困难。我不知道在哪里声明订阅的用户,如何创建函数以及如何导航他们! 非常感谢您的帮助! 这就是我的代码的外观 //这是我的身份验证服务 static void signUpUser( BuildContext context, String name, String email
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);
}
}
存储角色信息最常见的两个位置是: 作为该用户的Firebase身份验证令牌中的, 在与该用户关联的文档中的数据库中。 无论您选择哪一个,您都应该在一个可信的环境中设置此角色—您的开发机器、您控制的服务器或云功能,否则任何人都可以更改自己的角色 在这些位置中设置后,您可以访问客户端代码中的角色信息,并导航到该用户的正确屏幕 另见: 这是一段视频 @错误位置有一个示例颤振架构可用于此问题 以下是相同的链接:
我已经尝试和测试了好几次,它就像一个符咒。此外,当用户角色发生变化时,用户无法访问以前用户的信息,这有助于数据保护和隐私问题。我了解这个概念的工作原理,但在代码中设置它确实很困难。因为您的代码没有显示任何关于用户角色的信息,所以很难提供帮助。您询问的具体代码是什么?如果不行,我建议你去看看hej frank。谢谢你的回复!我用我的用户模型更新了这个问题。老实说,我不太确定如何定义用户角色开始。在这种情况下,视频将是一个很好的开始。存储角色信息最常见的两个位置是:1作为该用户的Firebase身份验证令牌中的自定义声明,2在与该用户关联的文档中的数据库中。无论您选择哪一个,都应该在您的开发机器、您控制的服务器或云功能的受信任环境中设置此角色,否则任何人都可以更改自己的角色。是否尝试过:?
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();
}
},
);
}
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
});