本课程开发软件与项目初始代码可以通过云盘下载,答疑服务可以关注视频片头的二维码获取。
https://www.123912.com/s/A75eVv-27mod,提取码:yton
教学视频
上节课我们知道了RBAC权限模型,这节课我们继续往下写代码,让SaToken框架能调用SQL语句查询到用户具备的权限,这样就算是把SaToken的授权服务集成到了MIS项目中。
一、编写hxoa-oms
子系统
在com.example.hxoa.cloud.dubbo
包中,创建UserApi.java
接口。
package com.example.hxoa.cloud.dubbo;
import com.example.hxoa.cloud.common.general.R;
public interface UserApi {
public R searchUserPermissions(long id);
public R searchUserRoles(long id);
}
在com.example.hxoa.cloud.oms.api
包中,创建UserApiHandler.java
类。
package com.example.hxoa.cloud.oms.api;
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.example.hxoa.cloud.common.general.R;
import com.example.hxoa.cloud.dubbo.UserApi;
import com.example.hxoa.cloud.oms.db.dao.UserMapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;
import java.util.ArrayList;
import java.util.HashMap;
@DubboService
@Slf4j
public class UserApiHandler implements UserApi {
@Resource
private UserMapper userMapper;
@Override
@SentinelResource("UserApiHandler.searchUserPermissions")
public R searchUserPermissions(long id) {
ArrayList<String> permissions = userMapper.searchUserPermissions(id);
return R.ok().setAttributeAll(new HashMap(){{
put("permissions", permissions);
put("status","SUCCESS");
}});
}
@Override
@SentinelResource("UserApiHandler.searchUserRoles")
public R searchUserRoles(long id) {
ArrayList<String> roles = userMapper.searchUserRoles(id);
return R.ok().setAttributeAll(new HashMap(){{
put("roles", roles);
put("status","SUCCESS");
}});
}
}
二、编写hxoa-mis
子系统
在com.example.hxoa.cloud.dubbo
包中,创建UserApi.java
接口。
package com.example.hxoa.cloud.dubbo;
import com.example.hxoa.cloud.common.general.R;
public interface UserApi {
public R searchUserPermissions(long id);
public R searchUserRoles(long id);
}
在com.example.hxoa.cloud.mis.config
包中,创建StpUtilImpl.java
类。
package com.example.hxoa.cloud.mis.config;
import cn.dev33.satoken.stp.StpInterface;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.map.MapUtil;
import com.example.hxoa.cloud.common.exception.HxoaException;
import com.example.hxoa.cloud.common.general.R;
import com.example.hxoa.cloud.dubbo.UserApi;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Component
@Slf4j
public class StpUtilImpl implements StpInterface {
@DubboReference
private UserApi userApi;
@Override
public List<String> getPermissionList(Object loginId, String loginType) {
long userId = Convert.toLong(loginId);
R r = userApi.searchUserPermissions(userId);
Map result = r.getAttributeAll();
String status = MapUtil.getStr(result, "status");
if ("SUCCESS".equals(status)) {
ArrayList<String> list = (ArrayList<String>) result.get("permissions");
if (list == null || list.isEmpty()) {
throw new HxoaException("获取权限失败");
}
return list;
}
else {
throw new HxoaException("获取权限失败");
}
}
@Override
public List<String> getRoleList(Object loginId, String loginType) {
long userId = Convert.toLong(loginId);
R r = userApi.searchUserRoles(userId);
Map result = r.getAttributeAll();
String status = MapUtil.getStr(result, "status");
if ("SUCCESS".equals(status)) {
ArrayList<String> list = (ArrayList<String>) result.get("roles");
if (list == null || list.isEmpty()) {
throw new HxoaException("获取角色失败");
}
return list;
}
else {
throw new HxoaException("获取角色失败");
}
}
}