gpt4 book ai didi

javascript - 如何在 FireBase 和 Angular 中根据用户隐藏元素

转载 作者:行者123 更新时间:2023-11-27 22:49:33 25 4
gpt4 key购买 nike

我开始将 Firebase 与 AngularJS 结合使用。来自 php/服务器端渲染的页面。

我不明白我们应该如何向某些用户隐藏应用程序的一部分。我基本上有 3 个级别的用户( guest /成员(member)/管理员)我可以使用基于用户的 ng-show 进行隐藏,但这仅隐藏客户端。数据仍然发送给用户

现实生活示例:

菜单项根据用户级别的不同而不同。我正在考虑使用 ngshow 并检查 uuid ,但话又说回来,公开管理员 uuid 是一个好主意吗?对我来说听起来很糟糕。

然后我考虑将菜单放入数据库并请求元素。并非所有用户都会访问所有项目,但这意味着大量“故意未经授权的访问尝试”

处理这个问题的正确方法是什么?我觉得我错过了有关依赖 Firebase 服务的客户端应用的一些重要内容。

最佳答案

查看服务层中的 userStatus 方法以及它在其他层中的用法。

服务层:

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { AngularFireAuthModule, AngularFireAuth } from 'angularfire2/auth';
import * as firebase from 'firebase/app';

@Injectable()
export class AuthService {

user: Observable<firebase.User>;

constructor(private fireAuth: AngularFireAuth) {
}

loginGoogle() {

this.fireAuth.auth.signInWithPopup(new firebase.auth.EmailAuthProvider())
.catch(function (error) {
alert('Please try again');
});
}

logout() {
this.fireAuth.auth.signOut();
}

userStatus() {
return this.fireAuth.authState;
}
}

导航栏组件:

import { Component, OnInit } from '@angular/core';
import { AuthService } from '../../services/auth.service';
import { Observable } from 'rxjs/Observable';
import * as firebase from 'firebase/app';

@Component({
selector: 'app-navbar',
templateUrl: './navbar.component.html',
styleUrls: ['./navbar.component.css']
})
export class NavbarComponent implements OnInit {

user: Observable<firebase.User>;

constructor(private authservice: AuthService) {
this.user = this.authservice.userStatus();
}

ngOnInit() {
}

login() {
this.authservice.loginGoogle();
}

logout() {
this.authservice.logout();
}
}

这是导航栏 View ,您可以在其中根据用户是否经过身份验证隐藏或显示元素:

<nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top">
<a class="navbar-brand" routerLink="/">Firebase</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>

<div class="collapse navbar-collapse" id="navbarsExampleDefault">
<ul class="navbar-nav mr-auto">
<li class="nav-item ">
<a class="nav-link" routerLink="/">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" *ngIf="(user | async)?.uid" routerLink="/listings">Listings</a>
</li>
<li class="nav-item">
<a class="nav-link" *ngIf="(user | async)?.uid" routerLink="/add-listing">Add Listing</a>
</li>
</ul>
<ul class="navbar-nav navbar-right">
<li class="nav-item">
<a class="nav-link" *ngIf="!(user | async)?.uid" (click)="login()">Login</a>
<a class="nav-link" *ngIf="(user | async)?.uid" (click)="logout()">Logout</a>
</li>
</ul>
<div *ngIf="(user | async)?.uid">
<img src="{{(user | async)?.photoURL}}" style="width:30px;height:30px;">
<br> Email: {{(user | async)?.email}}
<br> Name: {{(user | async)?.displayName}}
</div>
</div>
</nav>

关于javascript - 如何在 FireBase 和 Angular 中根据用户隐藏元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38170005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com