Commit cf7348f8 authored by 周健威's avatar 周健威

Merge remote-tracking branch 'origin/base-modify' into base-modify

parents 8ed094bd 1d1b342f
package com.github.wxiaoqi.security.gate.feign;
import com.github.wxiaoqi.security.api.vo.authority.PermissionInfo;
import com.github.wxiaoqi.security.gate.fallback.UserServiceFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.List;
/**
* ${DESCRIPTION}
*
* @author wanghaobin
* @create 2017-06-21 8:11
*/
@FeignClient(value = "ace-admin",fallback = UserServiceFallback.class)
public interface IAppUserService {
@RequestMapping(value="/api/app/user/un/{username}/permissions",method = RequestMethod.GET)
List<PermissionInfo> getPermissionByUsername(@PathVariable("username") String username);
}
...@@ -12,6 +12,7 @@ import com.github.wxiaoqi.security.common.constant.RequestTypeConstants; ...@@ -12,6 +12,7 @@ import com.github.wxiaoqi.security.common.constant.RequestTypeConstants;
import com.github.wxiaoqi.security.common.context.BaseContextHandler; import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import com.github.wxiaoqi.security.common.msg.BaseResponse; import com.github.wxiaoqi.security.common.msg.BaseResponse;
import com.github.wxiaoqi.security.common.msg.auth.TokenForbiddenResponse; import com.github.wxiaoqi.security.common.msg.auth.TokenForbiddenResponse;
import com.github.wxiaoqi.security.gate.feign.IAppUserService;
import com.github.wxiaoqi.security.gate.handler.RequestBodyRoutePredicateFactory; import com.github.wxiaoqi.security.gate.handler.RequestBodyRoutePredicateFactory;
import com.github.wxiaoqi.security.gate.utils.DBLog; import com.github.wxiaoqi.security.gate.utils.DBLog;
import com.github.wxiaoqi.security.gate.feign.ILogService; import com.github.wxiaoqi.security.gate.feign.ILogService;
...@@ -55,6 +56,11 @@ public class AccessGatewayFilter implements GlobalFilter { ...@@ -55,6 +56,11 @@ public class AccessGatewayFilter implements GlobalFilter {
@Autowired @Autowired
@Lazy @Lazy
private IUserService userService; private IUserService userService;
@Autowired
@Lazy
private IAppUserService appUserService;
@Autowired @Autowired
@Lazy @Lazy
private ILogService logService; private ILogService logService;
...@@ -202,8 +208,12 @@ public class AccessGatewayFilter implements GlobalFilter { ...@@ -202,8 +208,12 @@ public class AccessGatewayFilter implements GlobalFilter {
private boolean checkUserPermission(PermissionInfo[] permissions, ServerWebExchange ctx, IJWTInfo user) { private boolean checkUserPermission(PermissionInfo[] permissions, ServerWebExchange ctx, IJWTInfo user) {
// TODO 增加app用户权限逻辑 List<PermissionInfo> permissionInfos;
List<PermissionInfo> permissionInfos = userService.getPermissionByUsername(user.getUniqueName()); if (RequestTypeConstants.APP.equals(user.getRequestType())) {
permissionInfos = appUserService.getPermissionByUsername(user.getUniqueName());
} else {
permissionInfos = userService.getPermissionByUsername(user.getUniqueName());
}
PermissionInfo current = null; PermissionInfo current = null;
for (PermissionInfo info : permissions) { for (PermissionInfo info : permissions) {
boolean anyMatch = permissionInfos.parallelStream().anyMatch(new Predicate<PermissionInfo>() { boolean anyMatch = permissionInfos.parallelStream().anyMatch(new Predicate<PermissionInfo>() {
......
package com.github.wxiaoqi.security.admin.biz; package com.github.wxiaoqi.security.admin.biz;
import com.ace.cache.annotation.Cache; import com.ace.cache.annotation.Cache;
import com.ace.cache.annotation.CacheClear;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.wxiaoqi.security.admin.entity.AppUser; import com.github.wxiaoqi.security.admin.entity.AppUser;
import com.github.wxiaoqi.security.admin.entity.Group;
import com.github.wxiaoqi.security.admin.entity.User;
import com.github.wxiaoqi.security.admin.mapper.AppUserMapper; import com.github.wxiaoqi.security.admin.mapper.AppUserMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.TableResultResponse;
import com.github.wxiaoqi.security.common.util.Query;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static com.github.wxiaoqi.security.auth.common.constatns.CommonConstants.DATA_ALL_TRUE;
@Service @Service
public class AppUserBiz extends BaseBiz<AppUserMapper, AppUser> { public class AppUserBiz extends BaseBiz<AppUserMapper, AppUser> {
...@@ -20,4 +37,39 @@ public class AppUserBiz extends BaseBiz<AppUserMapper, AppUser> { ...@@ -20,4 +37,39 @@ public class AppUserBiz extends BaseBiz<AppUserMapper, AppUser> {
user.setUsername(username); user.setUsername(username);
return mapper.selectOne(user); return mapper.selectOne(user);
} }
public TableResultResponse<AppUser> selectPage(Query query, AppUser currentUser) {
if(DATA_ALL_TRUE.equals(currentUser.getDataAll())) {
return super.selectByQuery(query);
}else {
Example example = new Example(User.class);
if(query.entrySet().size()>0) {
Example.Criteria criteria = example.createCriteria();
for (Map.Entry<String, Object> entry : query.entrySet()) {
criteria.andLike(entry.getKey(), "%" + entry.getValue().toString() + "%");
}
}
if(StringUtils.isNotBlank(currentUser.getDataCompany())){
example.createCriteria().andIn("companyId", Arrays.asList(currentUser.getDataCompany().split(",")));
}
if(StringUtils.isNotBlank(currentUser.getDataZone())){
example.createCriteria().andIn("zoneId", Arrays.asList(currentUser.getDataZone().split(",")));
}
Page<Object> result = PageHelper.startPage(query.getPage(), query.getLimit());
List<AppUser> list = mapper.selectByExample(example);
return new TableResultResponse<AppUser>(result.getTotal(), list);
}
}
public List<Group> selectGroupsByAppUserId(Integer id) {
return mapper.selectGroupsByAppUserId(id);
}
@Transactional
public void insertAppUserGroup(Integer appUserId, Set<Integer> groups) {
mapper.deleteAppUserGroup(appUserId);
if (groups != null && groups.size() > 0) {
mapper.insertAppUserGroup(appUserId, groups);
}
}
} }
...@@ -112,7 +112,7 @@ public class GroupBiz extends BaseBiz<GroupMapper, Group> { ...@@ -112,7 +112,7 @@ public class GroupBiz extends BaseBiz<GroupMapper, Group> {
* @param groupId * @param groupId
* @param menus * @param menus
*/ */
@CacheClear(keys = {"permission:menu","permission:u"}) @CacheClear(keys = {"permission:menu","permission:u","app:permission:u"})
public void modifyAuthorityMenu(int groupId, String[] menus) { public void modifyAuthorityMenu(int groupId, String[] menus) {
resourceAuthorityMapper.deleteByAuthorityIdAndResourceType(groupId + "", AdminCommonConstant.RESOURCE_TYPE_MENU); resourceAuthorityMapper.deleteByAuthorityIdAndResourceType(groupId + "", AdminCommonConstant.RESOURCE_TYPE_MENU);
List<Menu> menuList = menuMapper.selectAll(); List<Menu> menuList = menuMapper.selectAll();
...@@ -151,7 +151,7 @@ public class GroupBiz extends BaseBiz<GroupMapper, Group> { ...@@ -151,7 +151,7 @@ public class GroupBiz extends BaseBiz<GroupMapper, Group> {
* @param menuId * @param menuId
* @param elementId * @param elementId
*/ */
@CacheClear(keys = {"permission:ele","permission:u"}) @CacheClear(keys = {"permission:ele","permission:u","app:permission:ele","app:permission:u"})
public void modifyAuthorityElement(int groupId, int menuId, int elementId) { public void modifyAuthorityElement(int groupId, int menuId, int elementId) {
ResourceAuthority authority = new ResourceAuthority(AdminCommonConstant.AUTHORITY_TYPE_GROUP, AdminCommonConstant.RESOURCE_TYPE_BTN); ResourceAuthority authority = new ResourceAuthority(AdminCommonConstant.AUTHORITY_TYPE_GROUP, AdminCommonConstant.RESOURCE_TYPE_BTN);
authority.setAuthorityId(groupId + ""); authority.setAuthorityId(groupId + "");
...@@ -167,7 +167,7 @@ public class GroupBiz extends BaseBiz<GroupMapper, Group> { ...@@ -167,7 +167,7 @@ public class GroupBiz extends BaseBiz<GroupMapper, Group> {
* @param menuId * @param menuId
* @param elementId * @param elementId
*/ */
@CacheClear(keys = {"permission:ele","permission:u"}) @CacheClear(keys = {"permission:ele","permission:u","app:permission:ele","app:permission:u"})
public void removeAuthorityElement(int groupId, int menuId, int elementId) { public void removeAuthorityElement(int groupId, int menuId, int elementId) {
ResourceAuthority authority = new ResourceAuthority(); ResourceAuthority authority = new ResourceAuthority();
authority.setAuthorityId(groupId + ""); authority.setAuthorityId(groupId + "");
......
package com.github.wxiaoqi.security.admin.mapper; package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.AppUser; import com.github.wxiaoqi.security.admin.entity.AppUser;
import com.github.wxiaoqi.security.admin.entity.Group;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.util.List;
import java.util.Set;
public interface AppUserMapper extends Mapper<AppUser> { public interface AppUserMapper extends Mapper<AppUser> {
List<Group> selectGroupsByAppUserId(Integer id);
int insertAppUserGroup(@Param("appUserId") Integer appUserId, @Param("groups") Set<Integer> groups);
int deleteAppUserGroup(Integer appUserId);
} }
...@@ -12,6 +12,5 @@ public interface ElementMapper extends Mapper<Element> { ...@@ -12,6 +12,5 @@ public interface ElementMapper extends Mapper<Element> {
public List<Element> selectAuthorityElementByClientId(@Param("clientId")String clientId); public List<Element> selectAuthorityElementByClientId(@Param("clientId")String clientId);
public List<Element> selectAllElementPermissions(); public List<Element> selectAllElementPermissions();
// TODO 修改查询SQL
List<Element> selectAuthorityElementByAppUserId(@Param("userId") String userId); List<Element> selectAuthorityElementByAppUserId(@Param("userId") String userId);
} }
\ No newline at end of file
package com.github.wxiaoqi.security.admin.rest;
import com.github.wxiaoqi.security.admin.biz.AppUserBiz;
import com.github.wxiaoqi.security.admin.entity.AppUser;
import com.github.wxiaoqi.security.admin.entity.Group;
import com.github.wxiaoqi.security.admin.entity.User;
import com.github.wxiaoqi.security.admin.vo.AppUserGroups;
import com.github.wxiaoqi.security.admin.vo.GroupUsers;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.msg.TableResultResponse;
import com.github.wxiaoqi.security.common.rest.CommonBaseController;
import com.github.wxiaoqi.security.common.util.Query;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@RestController
@RequestMapping("app/user")
@Slf4j
public class AppUserController extends CommonBaseController {
@Autowired
AppUserBiz appUserBiz;
@Autowired
private UserAuthUtil userAuthUtil;
@Autowired
private UserAuthConfig userAuthConfig;
@GetMapping("page")
public TableResultResponse list(@RequestParam Map<String, Object> params) {
Query query = new Query(params);
try {
return appUserBiz.selectPage(query,
appUserBiz.getUserByUsername(userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request)).getUniqueName()));
}catch (Exception e) {
log.error(e.getMessage());
return new TableResultResponse<User>();
}
}
@RequestMapping(value = "/{id}",method = RequestMethod.GET)
@ResponseBody
public ObjectRestResponse<AppUser> get(@PathVariable int id){
ObjectRestResponse<AppUser> entityObjectRestResponse = new ObjectRestResponse<>();
AppUser o = appUserBiz.selectById(id);
entityObjectRestResponse.data(o);
return entityObjectRestResponse;
}
@RequestMapping(value = "/{id}",method = RequestMethod.PUT)
@ResponseBody
public ObjectRestResponse<AppUser> update(@RequestBody AppUser entity){
appUserBiz.updateSelectiveById(entity);
return new ObjectRestResponse<AppUser>();
}
@RequestMapping(value = "/{id}",method = RequestMethod.DELETE)
@ResponseBody
public ObjectRestResponse<AppUser> remove(@PathVariable int id){
appUserBiz.deleteById(id);
return new ObjectRestResponse<AppUser>();
}
@RequestMapping(value = "/all",method = RequestMethod.GET)
@ResponseBody
public List<AppUser> all(){
return appUserBiz.selectListAll();
}
@GetMapping("groups/{id}")
public List<Group> groups(@PathVariable Integer id) {
return appUserBiz.selectGroupsByAppUserId(id);
}
@PostMapping("groups")
public ObjectRestResponse insertAppUserGroups(@RequestBody AppUserGroups appUserGroups) {
appUserBiz.insertAppUserGroup(appUserGroups.getAppUserId(), appUserGroups.getGroups());
return new ObjectRestResponse();
}
}
package com.github.wxiaoqi.security.admin.vo;
import lombok.Data;
import java.util.Set;
/**
* App用户角色
*/
@Data
public class AppUserGroups {
Integer appUserId;
Set<Integer> groups;
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.github.wxiaoqi.security.admin.mapper.AppUserMapper">
<insert id="insertAppUserGroup">
insert into app_group_member(user_id, group_id)
VALUES
<trim suffixOverrides=",">
<foreach collection="groups" item="groupId">
(#{appUserId}, #{groupId}),
</foreach>
</trim>
</insert>
<delete id="deleteAppUserGroup">
delete from app_group_member
where user_id = #{appUserId}
</delete>
<select id="selectGroupsByAppUserId" resultType="com.github.wxiaoqi.security.admin.entity.Group">
select *
from base_group bg
right join app_group_member agm on bg.id = agm.group_id
where user_id = #{id}
</select>
</mapper>
\ No newline at end of file
...@@ -42,17 +42,20 @@ ...@@ -42,17 +42,20 @@
on t.menu_id = m.id on t.menu_id = m.id
</select> </select>
<select id="selectAuthorityElementByAppUserId" resultMap="BaseResultMap"> <select id="selectAuthorityElementByAppUserId" resultMap="BaseResultMap">
select distinct t.code,t.type,t.name,t.uri,t.method,m.title as menu_id from base_resource_authority ra SELECT DISTINCT
inner join base_element t t.CODE,
on ra.resource_id = t.id t.type,
and ra.authority_id in ( t.NAME,
select group_id from base_group_member where user_id = #{userId} t.uri,
union select group_id from base_group_leader where user_id = #{userId} t.method,
) m.title AS menu_id
and ra.authority_type = 'group' FROM
and ra.resource_type = 'button' base_resource_authority ra
inner join base_menu m INNER JOIN base_element t ON ra.resource_id = t.id
on t.menu_id = m.id AND ra.authority_id IN ( SELECT group_id FROM app_group_member WHERE user_id = #{userId} )
AND ra.authority_type = 'group'
AND ra.resource_type = 'button'
INNER JOIN base_menu m ON t.menu_id = m.id
</select> </select>
<select id="selectAuthorityMenuElementByUserId" resultMap="BaseResultMap"> <select id="selectAuthorityMenuElementByUserId" resultMap="BaseResultMap">
select distinct t.* from base_resource_authority ra select distinct t.* from base_resource_authority ra
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment