Я работаю над шаблоном Angular 4, который называется SB Admin с Bootstrap 4. У меня есть форма регистрации, в которой создается пользователь, использующий Firebase Auth, который создает пользователя по электронной почте и паролю.Как вы можете видеть здесь
Консоль Firebase Auth
У меня есть эти файлы, как вы можете видеть на следующем рисунке в моем приложении.
Список файлов 1
Списки файлов 2
На моей странице регистрации у меня есть этот код:
<div class="login-page" [@routerTransition]>
<div class="row">
<div class="col-md-4 push-md-4">
<img class="user-avatar" src="assets/images/logo.png" width="150px"/>
<h1>Evolution HCC</h1>
<div *ngIf="success" class="alert alert-success" role="alert" style="margin-left: 8px; margin-right: 8px;">
<strong>Register successful!</strong>
</div>
<div *ngIf="failure" class="alert alert-danger" role="alert" style="margin-left: 8px; margin-right: 8px;">
<strong>Error!</strong> Check all the fields below and try again.
</div>
<form role="form">
<div class="form-content">
<div class="form-group">
<input required (input)="null" type="text" class="form-control input-underline input-lg" #name
name="fullName" placeholder="Full Name">
</div>
<div class="form-group">
<input required (input)="null" class="form-control input-underline input-lg" #email
name="signupMail" type="email" placeholder="Email">
</div>
<div class="form-group">
<input required (input)="null" type="password" class="form-control input-underline input-lg"
#password name="signupPassword"
placeholder="Password">
</div>
<div class="form-group">
<input required (input)="null" type="password" class="form-control input-underline input-lg"
#verifyPassword name="verifyPassword"
placeholder="Verify Password">
</div>
</div>
<button class="btn btn-m btn-primary" (click)="createItem"
[disabled]="!(password.value === verifyPassword.value) || !name.value || !email.value || !password.value || !verifyPassword.value">
Register
</button>
<button class="btn btn-m btn-secondary" [routerLink]="['/login']"> Back to Log in</button>
</form>
</div>
</div>
</div>
На моем profile.components.ts у меня есть
import { Component, OnInit } from '@angular/core';
import {ActivatedRoute, Params} from "@angular/router";
import {Location} from "@angular/common";
import {UsersService} from "../../../shared/services/users.service";
import {User} from "../../../shared/services/user";
import {AuthService} from "../../../login/auth.service";
import * as firebase from "firebase";
@Component({
selector: 'app-profile',
templateUrl: './profile.component.html',
styleUrls: ['./profile.component.scss']
})
export class ProfileComponent implements OnInit {
user: User;
hasProfile = true;
user_key: string;
constructor(private route: ActivatedRoute,
private location: Location,
private userService: UsersService,
private authService: AuthService) {
}
ngOnInit() {
this.route.params.subscribe(p => {
this.userService.getItem(p['key']).subscribe(user => {
this.user_key = p['key'];
if (user) {
this.user = user;
this.hasProfile = true;
} else {
this.user = new User();
}
})
});
}
createUserProfile() {
const data = this.user;
console.log(data);
this.userService.createItem(this.user_key, data);
}
}
И функция createUserProfile () привязана к createItem в файле с именем user.service.ts, который содержит
import { Injectable } from '@angular/core';
import { AngularFireDatabase, AngularFireList, AngularFireObject } from 'angularfire2/database';
import { Observable } from 'rxjs/Observable';
import * as _ from 'lodash';
import {User} from "./user";
@Injectable()
export class UsersService {
private basePath = '/users';
itemsRef: AngularFireList<User>;
itemRef: AngularFireObject<User>;
items: Observable<User[]>; // list of objects
item: Observable<User>; // single object
constructor(private db: AngularFireDatabase) {
this.itemsRef = db.list('/users')
}
// Return an observable list with optional query
// You will usually call this from OnInit in a component
getItemsList(query?) {
//const itemsRef = afDb.list('/items')
//return this.itemsRef.valueChanges()
return this.itemsRef.snapshotChanges().map(arr => {
return arr.map(snap => Object.assign(snap.payload.val(), { $key: snap.key }) )
})
}
// Return a single observable item
getItem(key: string): Observable<User> {
const itemPath = `${this.basePath}/${key}`;
this.item = this.db.object(itemPath).valueChanges();
return this.item
}
// Create a bramd new item
createItem(key: string, item: User): void {
const user = this.db.object(`/users/${key}`);
user.set(item);
}
// Update an exisiting item
updateItem(key: string, value: any): void {
this.itemsRef.update(key, value)
}
// Deletes a single item
deleteItem(key: string): void {
this.itemsRef.remove(key)
}
// Deletes the entire list of items
deleteAll(): void {
this.itemsRef.remove()
}
// Default error handling for all actions
private handleError(error) {
console.log(error)
}
}
Моя проблема в том, что я хочу создать пользователей, которые отображаются как объекты в БД Firebase, и дать им определенные роли и права, как я это сделал в user.ts
export class Roles {
editor: boolean;
admin: boolean;
}
export class User {
$key: string;
email: string;
name: string;
city: string;
profile = false;
admin = false;
roles = { }
constructor() {
this.name = '';
this.city = ''
}
}
Как я могу это сделатьМоя функция, которая создает пользователей в БД как объекты, будет работать вместо создания их в аутентификации.Или как мне сделать оба?Мне нужно создать массив пользователей в Firebase, а затем назначить им роль редактора или администратора.Аутентификация работает, поскольку она создает пользователей на моей вкладке аутентификации Firebase, но они мне нужны и в реальной БД, чтобы они тоже работали.