zhongrj
2024-04-22 a732684ccf6a76c3d7e4048b3718e0dd401f6e5f
登录新增登录类型,根据类型过滤对应类型的角色信息返回
9 files modified
158 ■■■■■ changed files
src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java 17 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/auth/granter/PasswordTokenGranter.java 12 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/mapper/RoleMapper.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/mapper/RoleMapper.xml 15 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/IRoleService.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/IUserService.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/impl/MenuServiceImpl.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/impl/RoleServiceImpl.java 23 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java 54 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
@@ -66,6 +66,16 @@
    private final BladeRedis bladeRedis;
    private final JwtProperties jwtProperties;
    /**
     *
     * @param tenantId
     * @param username
     * @param password
     * @param deptId
     * @param roleId
     * @param type 登录类型  2:pc  3: app
     * @return
     */
    @ApiLog("登录用户验证")
    @PostMapping("/oauth/token")
    @ApiOperation(value = "获取认证令牌", notes = "传入租户ID:tenantId,账号:account,密码:password")
@@ -73,7 +83,8 @@
                    @ApiParam(value = "账号", required = true) @RequestParam(required = false) String username,
                    @ApiParam(value = "密码", required = true) @RequestParam(required = false) String password,
                    @ApiIgnore @RequestHeader(name = TokenUtil.DEPT_HEADER_KEY, required = false) String deptId,
                    @ApiIgnore @RequestHeader(name = TokenUtil.ROLE_HEADER_KEY, required = false) String roleId) {
                    @ApiIgnore @RequestHeader(name = TokenUtil.ROLE_HEADER_KEY, required = false) String roleId,
                    @ApiParam(value = "登录类型", required = false) @RequestParam(required = false,defaultValue = "3") Integer loginType) {
        Kv authInfo = Kv.create();
@@ -89,7 +100,9 @@
            .set("grantType", grantType)
            .set("refreshToken", refreshToken)
            .set("userType", userType)
            .set("deptId", deptId).set("roleId", roleId);
            .set("deptId", deptId)
            .set("loginType",loginType)
            .set("roleId", roleId);
        ITokenGranter granter = TokenGranterBuilder.getGranter(grantType);
        UserInfo userInfo = granter.grant(tokenParameter);
src/main/java/org/springblade/modules/auth/granter/PasswordTokenGranter.java
@@ -68,6 +68,8 @@
        String tenantId = tokenParameter.getArgs().getStr("tenantId");
        String username = tokenParameter.getArgs().getStr("username");
        String password = tokenParameter.getArgs().getStr("password");
        // 获取登录类型 2:pc 3:app
        String type = tokenParameter.getArgs().getStr("loginType");
        // 判断登录是否锁定
        int cnt = Func.toInt(bladeRedis.get(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username)), 0);
@@ -83,16 +85,8 @@
            if (TokenUtil.judgeTenant(tenant)) {
                throw new ServiceException(TokenUtil.USER_HAS_NO_TENANT_PERMISSION);
            }
            // 获取用户类型
            String userType = tokenParameter.getArgs().getStr("userType");
            // 根据不同用户类型调用对应的接口返回数据,用户可自行拓展
            if (userType.equals(UserEnum.WEB.getName())) {
                userInfo = userService.userInfo(tenantId, username, DigestUtil.hex(password), UserEnum.WEB);
            } else if (userType.equals(UserEnum.APP.getName())) {
                userInfo = userService.userInfo(tenantId, username, DigestUtil.hex(password), UserEnum.APP);
            } else {
                userInfo = userService.userInfo(tenantId, username, DigestUtil.hex(password), UserEnum.OTHER);
            }
            userInfo = userService.userInfo(tenantId, username, DigestUtil.hex(password), Integer.parseInt(type));
        }
        if (userInfo == null || userInfo.getUser() == null) {
            // 增加错误锁定次数
src/main/java/org/springblade/modules/system/mapper/RoleMapper.java
@@ -74,4 +74,12 @@
     * @return
     */
    List<Role> getRoleList(@Param("roleParam") RoleParam roleParam);
    /**
     * 查询对应的角色id
     * @param roleId
     * @param type 登录类型 2:pc 3:app
     * @return
     */
    List<String> getRoleIdStrByRoleIdAndType(@Param("ids") String roleId,@Param("types") List<Integer> type);
}
src/main/java/org/springblade/modules/system/mapper/RoleMapper.xml
@@ -68,6 +68,21 @@
        </foreach>
    </select>
    <!--查询对应的角色id-->
    <select id="getRoleIdStrByRoleIdAndType" resultType="java.lang.String">
        SELECT id FROM BLADE_ROLE
        WHERE id IN
        <foreach collection="ids.split(',')" item="id" open="(" separator="," close=")">
            #{id}
        </foreach>
        <if test="types!=null and types.size()>0">
            and type in
            <foreach collection="types" item="type" open="(" separator="," close=")">
                #{type}
            </foreach>
        </if>
    </select>
    <!--角色查询-->
    <select id="getRoleList" resultType="org.springblade.modules.system.entity.Role">
        SELECT br.* FROM blade_role br
src/main/java/org/springblade/modules/system/service/IRoleService.java
@@ -124,4 +124,12 @@
     * @return
     */
    List<Role> getRoleList(RoleParam roleParam);
    /**
     * 查询对应的角色id
     * @param roleId
     * @param type 登录类型 2:pc 3:app
     * @return
     */
    List<String> getRoleIdStrByRoleIdAndType(String roleId,Integer type);
}
src/main/java/org/springblade/modules/system/service/IUserService.java
@@ -118,6 +118,17 @@
     * @param tenantId
     * @param account
     * @param password
     * @param type 登录类型 2:pc 3:app
     * @return
     */
    UserInfo userInfo(String tenantId, String account, String password, Integer type);
    /**
     * 用户信息
     *
     * @param tenantId
     * @param account
     * @param password
     * @param userEnum
     * @return
     */
src/main/java/org/springblade/modules/system/service/impl/MenuServiceImpl.java
@@ -110,6 +110,16 @@
    public static final List<Integer> list2 = Arrays.asList(1, 11, null);
    /**
     *
     * @param roleId
     * @param topMenuId
     * @param labelType
     * @param menuType
     * @param roleName
     * @param houseCode
     * @return
     */
    @Override
    public List<MenuVO> routes(String roleId, Long topMenuId, Integer labelType, Integer menuType, String roleName,String houseCode) {
        if (StringUtil.isBlank(roleId)) {
src/main/java/org/springblade/modules/system/service/impl/RoleServiceImpl.java
@@ -256,4 +256,27 @@
        roleParam.setRoleId(AuthUtil.getUser().getRoleId());
        return baseMapper.getRoleList(roleParam);
    }
    /**
     * 查询对应的角色id
     * @param roleId
     * @param type 登录类型 2:pc 3:app
     * @return
     */
    @Override
    public List<String> getRoleIdStrByRoleIdAndType(String roleId,Integer type) {
        List<Integer> list = new ArrayList<>();
        if (type!=1){
            list.add(1);
            // pc
            if (type==2){
                list.add(2);
            }
            // app
            if (type==3){
                list.add(3);
            }
        }
        return baseMapper.getRoleIdStrByRoleIdAndType(roleId,list);
    }
}
src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
@@ -274,6 +274,30 @@
        return buildUserInfo(user);
    }
    /**
     * 用户信息
     *
     * @param tenantId
     * @param account
     * @param password
     * @param type 登录类型 2:pc 3:app
     * @return
     */
    @Override
    public UserInfo userInfo(String tenantId, String account, String password, Integer type) {
        User user = baseMapper.getUser(tenantId, account, password);
        return buildUserInfo(user, type);
    }
    /**
     * 用户信息
     *
     * @param tenantId
     * @param account
     * @param password
     * @param userEnum
     * @return
     */
    @Override
    public UserInfo userInfo(String tenantId, String account, String password, UserEnum userEnum) {
        User user = baseMapper.getUser(tenantId, account, password);
@@ -319,6 +343,36 @@
        return userInfo;
    }
    /**
     *
     * @param user
     * @param type 登录类型 2:pc 3:app
     * @return
     */
    private UserInfo buildUserInfo(User user, Integer type) {
        if (ObjectUtil.isEmpty(user)) {
            return null;
        }
        UserInfo userInfo = new UserInfo();
        userInfo.setUser(user);
        if (Func.isNotEmpty(user)) {
            // 判断登录类型设置对应的角色id
            user.setRoleId(Strings.join(roleService.getRoleIdStrByRoleIdAndType(user.getRoleId(),type), ','));
            // 设置角色别名
            List<String> roleAlias = roleService.getRoleAliases(user.getRoleId());
            userInfo.setRoles(roleAlias);
        }
        // 根据每个用户平台,建立对应的detail表,通过查询将结果集写入到detail字段
        Kv detail = Kv.create().set("type", null);
        UserOther userOther = new UserOther();
        UserOther query = userOther.selectOne(Wrappers.<UserOther>lambdaQuery().eq(UserOther::getUserId, user.getId()));
        if (ObjectUtil.isNotEmpty(query)) {
            detail.set("ext", query.getUserExt());
        }
        userInfo.setDetail(detail);
        return userInfo;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public UserInfo userInfo(UserOauth userOauth) {