我希望能得到这样的东西:
firebase.auth().currentUser.canWrite();
根据我在Firebase控制台中设置的安全规则,这应该返回true
或false
。
firebase.auth().currentUser.canWrite();
根据我在Firebase控制台中设置的安全规则,这应该返回true
或false
。
FIRUser
对象的canWrite()
扩展中,该扩展返回true或false,具体取决于令牌是否具有正确的声明。好的,我已经仔细研究了这个建议,并分析了所有内容,找到了一个很好的解决方法。现在,让我首先告诉你,我想限制除管理员以外的其他用户查看UI按钮,例如“添加新项目”、“删除项目”等,以便他们无法修改数据库。
举个例子,我只希望具有admin@admin.com凭据的用户可以访问允许在数据库中进行修改的按钮和页面。
附:这是一个Ionic项目。
在我的app.component.ts文件中:
import { Events } from 'ionic-angular';
export class MyApp{
admins: any;
constructor(public events: Events){
this.initializeApp();
this.admins =[
{email: 'admin@admin.com'},
{email: 'another_admin@admin.com'}
//You may add more users whom you want to give admin privilege..
];
// Now subscribe to an event to check if the logged-in user is an admin user or not!
events.subscribe('check:admin', (email) => {
var isAdmin = false;
this.admins.forEach((x) => {
if(email === x.email)
isAdmin = true;
});
return isAdmin;
});
}
}
import { Events } from 'ionic-angular';
export class HomePage{
// Now declare and initialize a boolean variable. This will be true if the logged-in (currentUser) user is an admin.
isAdmin = this.events.publish('check:admin', firebase.auth().currentUser.email)[0];
// this.events.publish() returns an array, hence the weird workaround of '[0]'.
constructor(private events: Events){}
}
现在在我的home.html页面中:
<button *ngIf="isAdmin">Add new Item</button>
在这里,只有当变量'isAdmin'为真时,“添加新项目”按钮才会显示。这样,我们就可以控制向哪种类型的用户显示哪些UI元素。
希望这能有所帮助。谢谢!
检查用户是否有访问数据库的权限的一种可能的方法是尝试从数据库中读取(或写入)任何值。
例如,我有一个“虚拟”节点,并尝试读取该值。如果操作不成功,则意味着我正在处理权限问题:
dummyNode.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// read access successfully tested.
}
@Override
public void onCancelled(DatabaseError firebaseError) {
Log.v(TAG,"firebaseError:"+firebaseError);
//Common Error here: Transaction at /F failed: DatabaseError: Permission denied
}
});