sl-express/01-讲义/其他文档/权限管家使用说明.md

15 KiB
Raw Permalink Blame History

1、了解权限管家

1.1、介绍

公司有多个业务系统,这些业务系统的公共部分包括组织、用户、权限等系统管理: image-20220228161416340.png 这个公共的系统管理,可以剥离出一套基础组件服务,即权限管家。

传智权限管家是一个通用的权限管理中台服务,在神领物流项目中,我们使用权限系统管理企业内部员工,比如:快递员、司机、管理员等。

在权限管家中可以管理用户,管理后台系统的菜单,以及角色的管理。

1.2、逻辑模型

权限管家的接口根据管理范围分为公司级、应用级和系统接口,如下图:

2、部署安装

参考:https://sl-express.itheima.net/#/zh-cn/base-service?id=权限管家

3、登录

登录地址:http://auth.sl-express.com/api/authority/static/index.html#/login

用户名密码admin/123456

image-20220729150005960.png

image-20220729150028329.png

4、应用管理

权限管家是一个多应用的管理系统,所以要接入权限管家首先需要创建应用。

【应用管理】 => 【添加应用】 image-20220729150644377.png

创建成功:

image-20220729151041632.png

查看应用所对应的ID和CODE image-20220729151124872.png

5、组织管理

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

image.png

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

image.png

添加完成:

image.png

6、进入应用

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

image.png

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

image.png

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

image.png

应用中的角色:

image.png

7、新增用户

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

image.png image.png

新增用户:

image.png

添加成功:

image.png

8、分配角色

现在为【test01】分配快递员角色怎么操作呢

首先需要进入到【神领物流】应用,在【用户管理】中分配角色:

image.png

image.png

image.png

这样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依赖

<dependency>
    <groupId>com.itheima.em.auth</groupId>
    <artifactId>authority-sdk</artifactId>
    <version>{version}</version>
</dependency>

第二步实例化AuthTemplate对象

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依赖

<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文件

itcast:
  authority:
    host: 127.0.0.1 #authority服务地址,根据实际情况更改
    port: 8764 #authority服务端口
    timeout: 10000 #http请求的超时时间

第三步,使用用例

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));
    }
}