226 lines
15 KiB
Markdown
226 lines
15 KiB
Markdown
# 1、了解权限管家
|
||
## 1.1、介绍
|
||
|
||
公司有多个业务系统,这些业务系统的公共部分包括组织、用户、权限等系统管理:
|
||

|
||
这个公共的系统管理,可以剥离出一套基础组件服务,即权限管家。
|
||
|
||
传智权限管家是一个通用的权限管理中台服务,在神领物流项目中,我们使用权限系统管理企业内部员工,比如:快递员、司机、管理员等。
|
||
|
||
在权限管家中可以管理用户,管理后台系统的菜单,以及角色的管理。
|
||
## 1.2、逻辑模型
|
||
|
||
权限管家的接口根据管理范围分为公司级、应用级和系统接口,如下图:
|
||

|
||
# 2、部署安装
|
||
|
||
参考:[https://sl-express.itheima.net/#/zh-cn/base-service?id=权限管家](https://sl-express.itheima.net/#/zh-cn/base-service?id=%e6%9d%83%e9%99%90%e7%ae%a1%e5%ae%b6)
|
||
# 3、登录
|
||
|
||
登录地址:[http://auth.sl-express.com/api/authority/static/index.html#/login](http://auth.sl-express.com/api/authority/static/index.html#/login)
|
||
|
||
用户名密码:admin/123456
|
||
|
||

|
||
|
||

|
||
|
||
# 4、应用管理
|
||
|
||
权限管家是一个多应用的管理系统,所以要接入权限管家首先需要创建应用。
|
||
|
||
【应用管理】 => 【添加应用】
|
||

|
||
|
||
创建成功:
|
||
|
||

|
||
|
||
查看应用所对应的ID和CODE:
|
||

|
||
|
||
# 5、组织管理
|
||
|
||
一般公司会设置不同的组织结构用来管理人员,比如:总部、分公司、人事部、行政部、财务部、物流部、物流转运等。
|
||
|
||

|
||
|
||
添加组织,组织是一颗树,所以需要选择上级组织:
|
||
|
||

|
||
|
||
添加完成:
|
||
|
||

|
||
|
||
# 6、进入应用
|
||
|
||
对于应用的操作需要进入到应用中才能操作:
|
||
|
||

|
||
|
||
进入应用后,可以看到左侧菜单有3项管理:【用户管理】、【菜单管理】、【角色管理】
|
||
|
||

|
||
|
||
对应的后台系统的菜单列表:**(不要修改)**
|
||
|
||

|
||
|
||
应用中的角色:
|
||
|
||

|
||
|
||
# 7、新增用户
|
||
|
||
新增用户需要【返回权限管家】进行操作,在【用户管理】中【新增用户】:
|
||
|
||

|
||

|
||
|
||
新增用户:
|
||
|
||

|
||
|
||
添加成功:
|
||
|
||

|
||
|
||
# 8、分配角色
|
||
|
||
现在为【test01】分配快递员角色,怎么操作呢?
|
||
|
||
首先需要进入到【神领物流】应用,在【用户管理】中分配角色:
|
||
|
||

|
||
|
||

|
||
|
||

|
||
|
||
这样,test01就拥有了【快递员】角色了。
|
||
|
||
同理,可以添加其他的用户了。
|
||
# 9、SDK使用说明
|
||
## 9.1、关于authority-sdk
|
||
|
||
authority-sdk是基于authority-sdk的restful接口实现的Java SDK的封装,实现了token、组织、菜单、角色等功能。
|
||
## 9.2、快速集成使用
|
||
|
||
authority-sdk提供了两种方式与业务系统对接,分别是:
|
||
|
||
- java sdk方式
|
||
- Spring Boot集成方式
|
||
## 9.3、使用方法
|
||
### 9.3.1、java sdk方式
|
||
> **第一步,导入maven依赖**
|
||
|
||
```xml
|
||
<dependency>
|
||
<groupId>com.itheima.em.auth</groupId>
|
||
<artifactId>authority-sdk</artifactId>
|
||
<version>{version}</version>
|
||
</dependency>
|
||
```
|
||
|
||
> **第二步,实例化AuthTemplate对象**
|
||
|
||
|
||
```java
|
||
String host = "127.0.0.1"; //Authority服务地址
|
||
int port = 8764; //Authority服务端口
|
||
int timeout = 1000; //http请求的超时时间,不传值默认为10S
|
||
|
||
//token,非登录请求都需要带上,一般情况下登录成功后将该数据放入缓存中
|
||
String token = "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxIiwiYWNjb3VudCI6ImFkbWluIiwibmFtZSI6IuW5s-WPsOeuoeeQhuWRmCIsIm9yZ2lkIjo4NzQyMjc2MTUxNzM0NDk4MjUsInN0YXRpb25pZCI6ODU3OTQwMTU3NDYwOTU3NTM3LCJhZG1pbmlzdHJhdG9yIjp0cnVlLCJleHAiOjE2NTEyNTkyODB9.anqT0MD9zAr13KG9OE4mqHHK2UMCOXUjeMrEsN1wy9_a14zFbjPkiDZ8dM7JirsAgj61yvshoP6pqBImdmyilQN-iFSa_ci15Ii4HhfFE1mcaRon3ojX_T9ncjHKuF9Y9ZPKT68NOzOfCwvhDrG_sDiaI1C-TwEJmhLM78FhwAI";
|
||
//应用ID,非登录请求都需要带上,该参数表示你需要查询哪个应用相关数据,一般情况下置于配置文件中
|
||
Long applicationId = 1L;
|
||
//登录获取token
|
||
AuthTemplate authTemplate = new AuthTemplate(host,port,TIME_OUT);
|
||
Result<LoginDTO> result = authTemplate.opsForLogin().token("admin","123456");
|
||
|
||
//后续基于AuthTemplate可以调用各种服务
|
||
AuthTemplate authTemplate = new AuthTemplate(host,port,TIME_OUT,token,applicationId);
|
||
Result<List<MenuDTO>> result = authTemplate.opsForPermission().getMenu();
|
||
log.info("菜单:{}", JSONObject.toJSONString(result));
|
||
```
|
||
|
||
### 9.3.2、Spring Boot集成方式
|
||
> **第一步,导入maven依赖**
|
||
|
||
|
||
```xml
|
||
<dependency>
|
||
<groupId>com.itheima.em.auth</groupId>
|
||
<artifactId>itcast-auth-spring-boot-starter</artifactId>
|
||
<version>1.0</version>
|
||
</dependency>
|
||
|
||
<!-- 如果是SNAPSHOT版本,如要在项目的pom.xml文件中引入快照版源 -->
|
||
<repositories>
|
||
<repository>
|
||
<id>sonatypeSnapshots</id>
|
||
<name>Sonatype Snapshots</name>
|
||
<releases>
|
||
<enabled>false</enabled>
|
||
</releases>
|
||
<snapshots>
|
||
<enabled>true</enabled>
|
||
</snapshots>
|
||
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
|
||
</repository>
|
||
</repositories>
|
||
```
|
||
|
||
> **第二步,配置application.yml文件**
|
||
|
||
|
||
```yaml
|
||
itcast:
|
||
authority:
|
||
host: 127.0.0.1 #authority服务地址,根据实际情况更改
|
||
port: 8764 #authority服务端口
|
||
timeout: 10000 #http请求的超时时间
|
||
```
|
||
|
||
**第三步,使用用例**
|
||
|
||
```java
|
||
package com.example.demo.service;
|
||
|
||
import com.alibaba.fastjson.JSONObject;
|
||
import com.itheima.auth.sdk.AuthTemplate;
|
||
import com.itheima.auth.sdk.common.Result;
|
||
import com.itheima.auth.sdk.dto.LoginDTO;
|
||
import com.itheima.auth.sdk.dto.MenuDTO;
|
||
import lombok.extern.slf4j.Slf4j;
|
||
import org.springframework.beans.factory.annotation.Value;
|
||
import org.springframework.stereotype.Service;
|
||
|
||
import java.util.List;
|
||
|
||
@Slf4j
|
||
@Service
|
||
public class AuthService {
|
||
|
||
@Value("${itcast.authority.host}")
|
||
private String host;
|
||
|
||
@Value("${itcast.authority.port}")
|
||
private int port;
|
||
|
||
private final static int TIME_OUT = 10000;
|
||
|
||
/**
|
||
* 登录获取token
|
||
* @param account
|
||
* @param password
|
||
*/
|
||
public void login(String account, String password) {
|
||
AuthTemplate authTemplate = new AuthTemplate(host,port);
|
||
Result<LoginDTO> loginDTO = authTemplate.opsForLogin().token(account, password);
|
||
log.info("登录结果:{}", JSONObject.toJSONString(loginDTO));
|
||
}
|
||
}
|
||
```
|