Как мне получить root права на этот шаблон для кнопки заголовка Проблема Angb 4 с двойной регистрацией в Firebase - PullRequest
0 голосов
/ 13 сентября 2018

Я работаю над шаблоном 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, но они мне нужны и в реальной БД, чтобы они тоже работали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...