Support binding user and role (#231)

### Motivation
This is the third pr of task #14. 
After merging this pr
1. pulsar-manager platform will have the preliminary multi-tenant capability. After each user logs in to the platform for the first time, a default tenant named his user name will be created for him, and a default role will be created. The role will be bound to tenant resources, bind the user to the tenant, and then the user can only see and operate the resources of the tenant bound to him when entering the platform.
2. Join other tenants. The administrator of one tenant can invite other users to join the tenant he manages, and only need to create a record in role bing.
3. Create roles. The tenant's administrator can create some roles under this tenant. The roles bind different resources. When other users enter, they can be assigned different roles, thus limiting their operation of different resources.

### Modifications

* Create default tenant, default role, default role binding
* Cache namespace
* Create role binding
* Add role binding page

### Verifying this change
Add unit test
45 files changed
tree: 0c6575451f0a5dcde7e2fb60d06601b27d8bcbf9
  1. .github/
  2. distribution/
  3. docker/
  4. docs/
  5. front-end/
  6. gradle/
  7. src/
  8. .gitignore
  9. build.gradle
  10. CONTRIBUTING.md
  11. gradle.properties
  12. gradlew
  13. gradlew.bat
  14. Jenkinsfile
  15. LICENSE
  16. README.md
  17. VERSION
README.md

Apache Pulsar manager

Apache Pulsar manager is a web-based GUI management tool for managing and monitoring Pulsar.

Feature

  • Tenants Management
  • Namespaces Management
  • Topics Management
  • Subscriptions Management
  • Brokers Management
  • Clusters Management
  • Dynamic environments with multiple changes
  • Support JWT Auth

Feature preview

Log in

Use the default account (pulsar) and the default password (pulsar) to log in.

pulsar-manager-login

Configure environment

The puslar-manager supports multiple environment configurations and can manage multiple environments conveniently.

pulsar-manager-environments

Manage tenants

pulsar-manager-tenants

Manage namespaces

pulsar-manager-namespaces

Manage topics

pulsar-manager-topics

Manage subscriptions

pulsar-manager-subscriptions

Manage clusters

pulsar-manager-clusters

Manage brokers

pulsar-manager-brokers

Topics monitoring

The pulsar-manager can monitor topics and subscriptions.

pulsar-manager-topics-monitors

Manage token

pulsar-manager-token

Prerequisites

  • Java JDK 1.8
  • Node 10.15.3 or later
  • Npm 6.4.1 or later
  • Pulsar 2.4.0 or later
  • Docker

Preparation

  1. Start Pulsar standalone.

    docker pull apachepulsar/pulsar:2.4.0
    docker run -d -it -p 6650:6650 -p 8080:8080 -v $PWD/data:/pulsar/data --name pulsar-manager-standalone apachepulsar/pulsar:2.4.0 bin/pulsar standalone
    
  2. Build an environment.

    You can build an environment with Docker or build a local environment.

    • Build an environment with Docker

      • REDIRECT_HOST: the IP address of the front-end server.

      • REDIRECT_PORT: the port of the front-end server.

      • DRIVER_CLASS_NAME: the driver class name of PostgreSQL.

      • URL: the url of PostgreSQL jdbc, example: jdbc:postgresql://127.0.0.1:5432/pulsar_manager.

      • USERNAME: the username of PostgreSQL.

      • PASSWORD: the password of PostgreSQL.

      • LOG_LEVEL: level of log.

      docker pull apachepulsar/pulsar-manager
      docker run -it -p 9527:9527 -e REDIRECT_HOST=front-end-ip -e REDIRECT_PORT=front-end-port -e DRIVER_CLASS_NAME=org.postgresql.Driver -e URL='jdbc-url' -e USERNAME=root -e PASSWORD=pulsar -e LOG_LEVEL=DEBUG apachepulsar/pulsar-manager /bin/sh
      

      This is an example:

      docker pull apachepulsar/pulsar-manager:v0.1.0
      docker run -it -p 9527:9527 -e REDIRECT_HOST=http://192.168.0.104 -e REDIRECT_PORT=9527 -e DRIVER_CLASS_NAME=org.postgresql.Driver -e URL='jdbc:postgresql://127.0.0.1:5432/pulsar_manager' -e USERNAME=pulsar -e PASSWORD=pulsar -e LOG_LEVEL=DEBUG -v $PWD:/data apachepulsar/pulsar-manager:v0.1.0 /bin/sh
      
    • Build a local environment

      (1) Download the source code.

      git clone https://github.com/apache/pulsar-manager
      

      (2) Build and start the backend.

      cd pulsar-manager
      ./gradlew build -x test
      cd build/distributions
      unzip pulsar-manager.zip or tar -zxvf pulsar-manager.tar
      ./pulsar-manager/bin/pulsar-manager
      

      (3) Build and start the front end.

      cd pulsar-manager/front-end
      npm install --save
      npm run dev
      
  3. Access Pulsar manager website.

    Use the account and the password to log in to the Pulsar manager website as below.

Default Test database HerdDB

Introduction

Pulsar Manager bundles JDBC Drivers for HerdDB. The default configuration starts and embedded in-memory only HerdDB database.

HerdDB can be used in production, you just have to use the correct JDBC URL. Follow the instructions in application.properties to switch the connection to a standalone HerdDB service or cluster.

The JDBC URL will look like this: jdbc:herddb:server:localhost:7000

In cluster mode HerdDB uses Apache BookKeeper and Apache ZooKeeper to store data and metadata, you can share your ZooKeeper cluster and the Bookies bundled with Pulsar.

The JDBC URL will look like this: jdbc:herddb:zookeeper:localhost:2181/herddb

In order to start and setup an HerdDB database follow the instructions on the HerdDB documentation.

Back end

For more information about the back end, see pulsar-manager-backend.

Front end

For more information about the front end, see pulsar-manager-frontend.