# SAAS-UPMS
**Repository Path**: ws_developer/nodecollege-upms
## Basic Information
- **Project Name**: SAAS-UPMS
- **Description**: 基于 Spring cloud、nacos、vue的前后端分离分布式微服务Saas权限管理系统。包含运维/运营、C端用户、B端租户成员三套用户体系的权限管理,切换机构、切换角色,支持四个级别的页面接口访问权限校验、四个级别的数据权限的设置和校验,机构角色和机构用户两种用户授权模式,微服务接口管理、接口访问权限动态设置、接口访问量统计功能,前端工程、前端页面、页面按钮管理配置功能,产品线管理功能,租户开通工单功能,租户预制角色管理功能,系统、用户、机构、租户配置功能,预制配置功能,日志管理功能,任务调度功能,微服接口访问量统计功能,C端用户实时IM功能。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 199
- **Created**: 2020-12-28
- **Last Updated**: 2020-12-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# SAAS权限管理系统
基于 `Spring cloud`、`nacos`、`vue`的前后端分离分布式微服务`Saas`权限管理系统。包含运维/运营、C端用户、B端租户成员三套用户体系的权限管理,切换机构、切换角色,支持四个级别的页面接口访问权限校验、四个级别的数据权限的设置和校验,机构角色和机构用户两种用户授权模式,微服务接口管理、接口访问权限动态设置、接口访问量统计功能,前端工程、前端页面、页面按钮管理配置功能,产品线管理功能,租户开通工单功能,租户预制角色管理功能,系统、用户、机构、租户配置功能,预制配置功能,日志管理功能,任务调度功能,微服接口访问量统计功能,C端用户实时`IM`功能。
## 演示地址
租的阿里云的服务器,内存有限,只搭了一套正式环境,下面运维/运营只给了查看权限,没有操作权限。更多的功能建议自己下载代码运行后试试吧。
- 运维运营登录地址:http://www.nodecollege.com/admin/login 账号/密码:`admin1 `/`123456aA.`
- 用户登录地址:http://www.nodecollege.com/me/login 账号/密码: `15739575703`/`123456aA.`
- 多租户成员登录地址:(用租户代码作为三级域名)
http://test01.tenant.nodecollege.com/tenant/login 账号/密码:`00001`/`a123456`
http://test02.tenant.nodecollege.com/tenant/login 账号/密码:`00001`/`aA123456`
- `Gitee`地址:https://gitee.com/tinyLC/nodecollege-upms
基于该权限管理系统,配套开发了C端博客系统。
- 博客地址:http://www.nodecollege.com
**如果觉得不错的话,可以给我一个start嘛?**
**文件结构**
- server:后端工程
- nacos:注册中心
- tools:通用工具包
- operate:运营/用户后端
- gateway:接口网关
- log:日志后端
- sync:任务调度后端
- chat:实时`IM`后端
- tenant:租户管理后端
- ui:前端工程
- common:前端公用组件
- operate:运营/运维前端
- me:个人前端
- tenant:租户权限管理前端
- `nginx`:`nginx`配置文件
- `sql`: 初始化脚本
## 一、介绍
企业级多租户后台权限管理框架(`SAAS`)。

## 二、主要功能:
### 1 后端微服务接口管理->前端工程管理->产品管理
这三个管理功能是依次依赖的,为后期的权限管理提供基础数据,同时也是便于清晰直白的体现整个系统的功能,利于后期系统的维护。
**后端微服务接口管理**
功能:
1)用于管理查看所有的微服务接口信息,用于后期服务增多,接口增多后,进行系统优化时提供参考。
2)进行接口访问权限的设置。
3)接口访问量统计。
4)给前端管理提供接口数据支持。
微服务工程只需要引入`base-client`包,就可以自动添加、更新该微服务所有的接口信息,无需手动操作。在产品管理里进行配置了后,通过**刷新产品授权限制信息**按钮就可以自动完成接口访问授权的设置。
`TODO`: 接口文档自动生成,接口自动化测试。

**前端工程管理**
主要作用:直观的体现系统一共有哪些前端工程,每个前端工程有几个页面,每个页面可以调用哪些接口。
前端和页面数据由前端开发人员将各自前端功能开发完成后,手动进行录入,接口数据从后端服务接口中手动选择。
给产品管理提供页面和按钮数据。

**产品管理**
产品是面向客户群体的,系统功能是围绕产品进行开发的,所以在这里进行产品的设置和定义,同时将对应的系统功能进行绑定。
产品绑定的菜单中,分类导航菜单需要手动进行创建,菜单页面从前端工程管理里选取。

### 2 产品管理
[产品管理详细说明](http://www.nodecollege.com/article/info/35)
### 3 角色管理
[角色管理详细说明](http://www.nodecollege.com/article/info/36)
### 4 运营运维、用户、租户三个用户群体的权限管理,数据隔离
三个用户群体的机构、用户、角色单独进行管理。
租户属于`2B`业务,租户之间数据隔离,可以为不同的租户开通不同的`2B`产品。
**TODO:** 租户数据库级别的数据隔离;租户开通产品访问量统计;访问量阈值设定。
### 5 细粒度接口权限控制
接口调用权限:无限制、只能内部调用、管理员登录|授权访问,用户登录|授权访问,租户成员登录|授权访问。
接口数据权限:所有机构数据、所属机构及下级机构数据、所属机构数据、个人数据
[接口权限控制详细说明](http://www.nodecollege.com/article/info/37)
### 6 自定义数据权限管理控制
在数据权限管理界面,可以根据具体的数据权限,对机构或机构成员进行数据权限授权。
目前控制的数据权限有
1)机构数据
2)数据权限管理的数据权限
3)微服务接口里的微服务数据权限
4)前端工程数据权限
[数据权限详细说明](http://www.nodecollege.com/article/info/69)
### [7 其他功能说明](http://www.nodecollege.com/article/info/34)
## 三、模块化设计与使用
业务概述
服务对应功能
| 前后端服务 | 对应功能 | 是否开源 |
| ------------------------------------------------------ | ------------------------------------------------------------ | -------- |
| /server/operate
/server/gateway
/ui/operate | 管理员权限管理
微服务接口管理
前端管理
产品管理
网关管理
配置管理
文件管理 | 是 |
| /server/log
/server/sync | 系统日志管理
任务管理
任务日志管理 | 是 |
| /ui/me | 用户权限管理 | 是 |
| /server/chat | 聊天系统
通讯录 | 是 |
| /server/tenant
/ui/tenant | 租户权限管理 | 是 |
| /server/worldTree
/ui/web | 世界树和辩论堂相关功能 | 否 |
| /server/article
/ui/article
/ui/article-info | 文章相关功能 | 否 |
/server/nacos、operate、gateway和/me/operate是基础微服务,只运行这四个服务,即可拥有运维运营及管理员主要功能。
/server/log、sync这两个后端服务,提供日志和任务调度功能,**不启动**这两个微服务的情况下,请确保其他服务配置文件中日志推送标志**不为true**(默认为false) **log.posh=false** ,为true的情况下,每个微服务都会将各自的日志信息存储到redis中,然后靠sync和log服务从redis中取出进行消费。
/ui/me,运行这个前端服务,即可使用C端用户功能。
/server/chat,运行这个后端服务,C端用户即可使用聊天和通讯录功能,前端在/ui/me中
/server/tenant,/ui/tenant,运行这两个服务后,可以使用租户管理相关功能。租户功能除了依赖之前的基础服务外,还依赖C端用户的功能,因为租户成员账号是 C端用户的一个身份,一个C端用户可以有多个租户成员账号。
**注**:当然要使用上述的功能,还得开通相应的权限才行
## 四、技术技巧
[密码RSA前端加密,后端解密](http://www.nodecollege.com/article/info/38)
[vue、nuxt添加百度统计功能](http://www.nodecollege.com/article/info/44)
## 五、运行和部署
server和ui文件内的工程都是独立的,正规公司都是每个工程都单独一个git工程,我这为了方便放一个git里了。
1. 创建数据库、导入数据
2. 启动redis、nacos
```
# redis自行启动,nacos在/server/nacos/bin/ 目录中有配套的启动文件
# 注意linux下单机启动命令如下
sh startup.sh -m standalone
```
3. 配置启动/server/operate、gateway
operate是基础核心服务,gateway是接口网关,所有前端接口调用都走gateway,gateway是动态网关,网关信息从redis中的获取(operate启动时将网关信息从数据库读取然后存储到redis中)。
4. 启动/ui/operate
```nodejs
# /ui/operate
npm install
npm run dev
```
启动成功后访问 http://localhost:8081/admin/login 登录即可 运维运营用户名/密码 `admin`/`123456aA.` 此时除了日志功能、任务调用功能访问会报404,租户功能不能正常使用外,其他功能都能正常使用了。
5. 启动/ui/me
```
# /ui/me
npm install
npm run dev
```
启动成功后访问 http://localhost:8083/me/login 登录 C端用户名/密码 `15739575703`/`123456aA.` 此时处理聊天功能、租户功能外,C端功能都能使用。
6. 配置启动/server/chat
启动成功后,C端聊天功能能够正常使用
7. 配置启动/server/log、sync
启动成功后,运维运营端日志功能和任务调度功能能够正常使用了
8. 配置启动/server/tenant
9. 启动/ui/tenant
启动成功后访问,http://localhost:8084/tenant/login 租户成员账号/密码 `15739575703`/`a123456` 此时,租户功能能够正常使用了。
注意:这是多租户系统,所以每个租户的登录地址都应该是这样的 http://{租户代码}.域名.com/tenant/login,通过二级域名的方式进行登录,然后将二级域名作为一个参数传递给后端服务,用于辨识是那个租户,所以本地启动时,需要在/ui/tenant/config/index.js文件中,将要用于登录的租户成员账号对应的租户代码进行手动填入,模拟二级域名缺失的参数
```javascript
'use strict'
// Template version: 1.3.1
// see http://vuejs-templates.github.io/webpack for documentation.
const path = require('path')
function onProxyReq (proxyReq, req, res) {
// 本地开发时,只能使用 如下设置的 B端租户代码 对应的B端账号进行登录
proxyReq.setHeader('LOGIN-TENANT-CODE', 'applyTenantTest13');
proxyReq.setHeader('ACCESS-SOURCE', 'nc-nginx');
}
module.exports = {
dev: {
// Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {
'/tenantApi': {
target: 'http://localhost:1081/',
changeOrigin: true,
// 代理响应事件
onProxyReq: onProxyReq,
pathRewrite: {
'^/': '/'
}
}
},
// Various Dev Server settings
host: 'localhost', // can be overwritten by process.env.HOST
port: 8084, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
...
}
```
## 六、结束