新建article微服务
在ruoyi-module中创建Article微服务
源码:
链接:https://pan.baidu.com/s/1OUDq_lAy3xwoTbk2MGPDGw
提取码:1111
基本配置
配置原理参见上一章:
nacos中
seata-server.properties
service.vgroupMapping.ruoyi-article-group=default
datasource.yml
article:
url: jdbc:mysql://192.168.0.80:3306/ry_news_article?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
username: root
password: root
ruoyi-article.yml
spring:
datasource:
dynamic:
# 设置默认的数据源或者数据源组,默认值即为 master
primary: master
datasource:
# 主库数据源
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: ${datasource.article.url}
username: ${datasource.article.username}
password: ${datasource.article.password}
ruoyi-gateway.yml
- id: ruoyi-article
uri: lb://ruoyi-article
predicates:
- Path=/article/**
filters:
- StripPrefix=1
核心代码
com.ruoyi.common.satoken中进行权限添加,由于app端没有注册需求,所以权限直接手写,数据库读取方式可参见源码中app_pc部分。
为所有APP用户添加一个app:user权限
package com.ruoyi.common.satoken.core.service;
import cn.dev33.satoken.stp.StpInterface;
import com.ruoyi.common.core.enums.UserType;
import com.ruoyi.common.satoken.utils.LoginHelper;
import com.ruoyi.system.api.model.LoginUser;
import java.util.ArrayList;
import java.util.List;
/**
* sa-token 权限管理实现类
*
* @author Lion Li
*/
public class SaPermissionImpl implements StpInterface {
/**
* 获取菜单权限列表
*/
@Override
public List<String> getPermissionList(Object loginId, String loginType) {
LoginUser loginUser = LoginHelper.getLoginUser();
UserType userType = UserType.getUserType(loginUser.getUserType());
if (userType == UserType.SYS_USER) {
return new ArrayList<>(loginUser.getMenuPermission());
} else if (userType == UserType.APP_USER) {
// 其他端 自行根据业务编写
List<String> list = new ArrayList<String>();
list.add("app:all");
return list;
}
return new ArrayList<>();
}
/**
* 获取角色权限列表
*/
@Override
public List<String> getRoleList(Object loginId, String loginType) {
LoginUser loginUser = LoginHelper.getLoginUser();
UserType userType = UserType.getUserType(loginUser.getUserType());
if (userType == UserType.SYS_USER) {
return new ArrayList<>(loginUser.getRolePermission());
} else if (userType == UserType.APP_USER) {
// 其他端 自行根据业务编写
}
return new ArrayList<>();
}
}
ArticleHomeController中通过@SaCheckPermission(“app:all”)注解进行验证,如果验证不通过,不允许进入注解所在的方法:
测试
登录成功后,会自动调用/load调用article资源:
如果将@SaCheckPermission(“app:all”)中的app:all替换为其他权限,则无法访问资源,权限拦截成功!
大功告成!