'店员权限bug处理合并'
This commit is contained in:
parent
4d551366ed
commit
a82d3fe57c
@ -6,6 +6,7 @@ import cn.lili.mybatis.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@ -21,6 +22,7 @@ import lombok.NoArgsConstructor;
|
||||
@TableName("li_clerk")
|
||||
@ApiModel(value = "店员")
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class Clerk extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
@ -56,7 +58,7 @@ public class Clerk extends BaseEntity {
|
||||
* @param clerkAddDTO
|
||||
*/
|
||||
public Clerk(ClerkAddDTO clerkAddDTO) {
|
||||
if (!clerkAddDTO.getRoles().isEmpty()) {
|
||||
if (clerkAddDTO.getRoles()!=null && !clerkAddDTO.getRoles().isEmpty()) {
|
||||
this.roleIds = CharSequenceUtil.join(",", clerkAddDTO.getRoles());
|
||||
}
|
||||
this.memberId = clerkAddDTO.getMemberId();
|
||||
|
@ -4,7 +4,10 @@ import cn.lili.mybatis.BaseIdEntity;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 用户角色
|
||||
@ -15,6 +18,8 @@ import lombok.Data;
|
||||
@Data
|
||||
@TableName("li_clerk_role")
|
||||
@ApiModel(value = "用户角色")
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
public class StoreClerkRole extends BaseIdEntity {
|
||||
|
||||
@ApiModelProperty(value = "店员唯一id")
|
||||
@ -32,3 +37,4 @@ public class StoreClerkRole extends BaseIdEntity {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,8 +27,8 @@ public interface ClerkMapper extends BaseMapper<Clerk> {
|
||||
* @param ew 店铺ID
|
||||
* @return
|
||||
*/
|
||||
@Select("select li_clerk.*,m.id from li_clerk inner join li_member as m on li_clerk.member_id = m.id ${ew.customSqlSegment}")
|
||||
IPage<Clerk> selectClerkPage(Page page, @Param(Constants.WRAPPER) QueryWrapper ew);
|
||||
@Select("select li_clerk.*,m.id,m.mobile as mobile from li_clerk inner join li_member as m on li_clerk.member_id = m.id ${ew.customSqlSegment}")
|
||||
IPage<ClerkVO> selectClerkPage(Page page, @Param(Constants.WRAPPER) QueryWrapper ew);
|
||||
|
||||
|
||||
}
|
@ -25,7 +25,7 @@ public interface StoreMenuMapper extends BaseMapper<StoreMenu> {
|
||||
*/
|
||||
@Select("SELECT menu.* FROM li_store_menu AS menu WHERE menu.id IN (" +
|
||||
"SELECT rm.menu_id FROM li_store_menu_role AS rm WHERE rm.role_id IN (" +
|
||||
"SELECT ur.role_id FROM li_clerk_role AS ur WHERE ur.user_id=#{userId}) OR rm.role_id IN (" +
|
||||
"SELECT ur.role_id FROM li_clerk_role AS ur WHERE ur.clerk_id=#{userId}) OR rm.role_id IN (" +
|
||||
"SELECT dr.role_id FROM li_store_department_role AS dr WHERE dr.id=(" +
|
||||
"SELECT department_id FROM li_clerk AS au WHERE au.id = #{userId})))")
|
||||
List<StoreMenu> findByUserId(String userId);
|
||||
|
@ -26,10 +26,10 @@ public interface StoreMenuRoleService extends IService<StoreMenuRole> {
|
||||
/**
|
||||
* 根据角色集合获取拥有的菜单具体权限
|
||||
*
|
||||
* @param userId
|
||||
* @param clerkId
|
||||
* @return
|
||||
*/
|
||||
List<StoreUserMenuVO> findAllMenu(String userId);
|
||||
List<StoreUserMenuVO> findAllMenu(String clerkId,String memberId);
|
||||
|
||||
|
||||
/**
|
||||
|
@ -9,16 +9,14 @@ import cn.lili.common.utils.StringUtils;
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.modules.member.entity.dos.Clerk;
|
||||
import cn.lili.modules.member.entity.dos.Member;
|
||||
import cn.lili.modules.member.entity.dos.StoreClerkRole;
|
||||
import cn.lili.modules.member.entity.dos.StoreRole;
|
||||
import cn.lili.modules.member.entity.dto.ClerkAddDTO;
|
||||
import cn.lili.modules.member.entity.dto.ClerkEditDTO;
|
||||
import cn.lili.modules.member.entity.dto.ClerkQueryDTO;
|
||||
import cn.lili.modules.member.entity.vo.ClerkVO;
|
||||
import cn.lili.modules.member.mapper.ClerkMapper;
|
||||
import cn.lili.modules.member.service.ClerkService;
|
||||
import cn.lili.modules.member.service.MemberService;
|
||||
import cn.lili.modules.member.service.StoreDepartmentService;
|
||||
import cn.lili.modules.member.service.StoreRoleService;
|
||||
import cn.lili.modules.member.service.*;
|
||||
import cn.lili.mybatis.util.PageUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
@ -52,7 +50,7 @@ public class ClerkServiceImpl extends ServiceImpl<ClerkMapper, Clerk> implements
|
||||
@Autowired
|
||||
private MemberService memberService;
|
||||
@Autowired
|
||||
private ClerkMapper clerkMapper;
|
||||
private StoreClerkRoleService storeClerkRoleService;
|
||||
|
||||
@Override
|
||||
public IPage<ClerkVO> clerkForPage(PageVO page, ClerkQueryDTO clerkQueryDTO) {
|
||||
@ -62,17 +60,9 @@ public class ClerkServiceImpl extends ServiceImpl<ClerkMapper, Clerk> implements
|
||||
clerkVOQueryWrapper.eq(StringUtils.isNotEmpty(clerkQueryDTO.getDepartmentId()), "li_clerk.department_id", clerkQueryDTO.getDepartmentId());
|
||||
clerkVOQueryWrapper.like(StringUtils.isNotEmpty(clerkQueryDTO.getClerkName()), "li_clerk.clerk_name", clerkQueryDTO.getClerkName());
|
||||
clerkVOQueryWrapper.like(StringUtils.isNotEmpty(clerkQueryDTO.getMobile()), "m.mobile", clerkQueryDTO.getMobile());
|
||||
IPage<Clerk> clerkPage = this.clerkMapper.selectClerkPage(PageUtil.initPage(page), clerkVOQueryWrapper);
|
||||
IPage<ClerkVO> clerkPage = this.baseMapper.selectClerkPage(PageUtil.initPage(page), clerkVOQueryWrapper);
|
||||
|
||||
List<ClerkVO> result = new ArrayList<>();
|
||||
clerkPage.getRecords().forEach(clerk -> {
|
||||
ClerkVO clerkVO = new ClerkVO(clerk);
|
||||
result.add(clerkVO);
|
||||
});
|
||||
|
||||
Page<ClerkVO> pageResult = new Page(clerkPage.getCurrent(), clerkPage.getSize(), clerkPage.getTotal());
|
||||
pageResult.setRecords(result);
|
||||
return pageResult;
|
||||
return clerkPage;
|
||||
|
||||
|
||||
/*Page<Clerk> clerkPage = page(initPage, initWrapper);
|
||||
@ -166,9 +156,9 @@ public class ClerkServiceImpl extends ServiceImpl<ClerkMapper, Clerk> implements
|
||||
if (!clerk.getStoreId().equals(UserContext.getCurrentUser().getStoreId())) {
|
||||
throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR);
|
||||
}
|
||||
if(clerkEditDTO.getIsSuper()){
|
||||
if (clerkEditDTO.getIsSuper()) {
|
||||
clerk.setRoleIds("");
|
||||
}else{
|
||||
} else {
|
||||
//角色赋值
|
||||
if (!clerkEditDTO.getRoles().isEmpty()) {
|
||||
clerk.setRoleIds(CharSequenceUtil.join(",", clerkEditDTO.getRoles()));
|
||||
@ -216,7 +206,20 @@ public class ClerkServiceImpl extends ServiceImpl<ClerkMapper, Clerk> implements
|
||||
throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
this.save(clerk);
|
||||
|
||||
//判断用户角色权限不为超级会员且权限路径不为空
|
||||
if(clerkAddDTO.getIsSuper()==false && clerkAddDTO.getRoles()!=null){
|
||||
//添加店员用户角色
|
||||
List<StoreClerkRole> storeClerkRoleList = new ArrayList<>();
|
||||
|
||||
clerkAddDTO.getRoles().stream().forEach(a -> {
|
||||
storeClerkRoleList.add(StoreClerkRole.builder().clerkId(clerk.getId()).roleId(a).build());
|
||||
});
|
||||
storeClerkRoleService.saveBatch(storeClerkRoleList);
|
||||
}
|
||||
|
||||
return clerk;
|
||||
}
|
||||
|
||||
@ -230,7 +233,7 @@ public class ClerkServiceImpl extends ServiceImpl<ClerkMapper, Clerk> implements
|
||||
QueryWrapper<Clerk> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("store_id", UserContext.getCurrentUser().getStoreId());
|
||||
queryWrapper.in("id", ids);
|
||||
List<Clerk> clerks = this.clerkMapper.selectList(queryWrapper);
|
||||
List<Clerk> clerks = this.baseMapper.selectList(queryWrapper);
|
||||
//校验要重置的店员是否是当前店铺的店员
|
||||
if (clerks.size() != ids.size()) {
|
||||
throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR);
|
||||
@ -253,7 +256,7 @@ public class ClerkServiceImpl extends ServiceImpl<ClerkMapper, Clerk> implements
|
||||
QueryWrapper<Clerk> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("store_id", UserContext.getCurrentUser().getStoreId());
|
||||
queryWrapper.in("id", ids);
|
||||
List<Clerk> clerks = this.clerkMapper.selectList(queryWrapper);
|
||||
List<Clerk> clerks = this.baseMapper.selectList(queryWrapper);
|
||||
if (clerks.size() > 0) {
|
||||
//校验要重置的店员是否是当前店铺的店员
|
||||
if (clerks.size() != ids.size()) {
|
||||
|
@ -426,10 +426,10 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
|
||||
* @param mobilePhone 手机号
|
||||
* @return 会员
|
||||
*/
|
||||
private Long findMember(String mobilePhone, String userName) {
|
||||
private Long findMember(String userName,String mobilePhone) {
|
||||
QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("mobile", mobilePhone)
|
||||
.or().eq("username", userName);
|
||||
.eq("username", userName);
|
||||
return this.baseMapper.selectCount(queryWrapper);
|
||||
}
|
||||
|
||||
|
@ -53,11 +53,11 @@ public class StoreMenuRoleServiceImpl extends ServiceImpl<StoreMenuRoleMapper, S
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<StoreUserMenuVO> findAllMenu(String userId) {
|
||||
String cacheKey = CachePrefix.STORE_USER_MENU.getPrefix() + userId;
|
||||
public List<StoreUserMenuVO> findAllMenu(String clerkId,String memberId) {
|
||||
String cacheKey = CachePrefix.STORE_USER_MENU.getPrefix() + memberId;
|
||||
List<StoreUserMenuVO> menuList = (List<StoreUserMenuVO>) cache.get(cacheKey);
|
||||
if (menuList == null) {
|
||||
menuList = storeMenuMapper.getUserRoleMenu(userId);
|
||||
if (menuList == null || menuList.isEmpty()) {
|
||||
menuList = storeMenuMapper.getUserRoleMenu(clerkId);
|
||||
cache.put(cacheKey, menuList);
|
||||
}
|
||||
return menuList;
|
||||
|
@ -8,14 +8,17 @@ import cn.lili.common.exception.ServiceException;
|
||||
import cn.lili.common.security.AuthUser;
|
||||
import cn.lili.common.security.context.UserContext;
|
||||
import cn.lili.common.vo.SearchVO;
|
||||
import cn.lili.modules.member.entity.dos.Clerk;
|
||||
import cn.lili.modules.member.entity.dos.StoreMenu;
|
||||
import cn.lili.modules.member.entity.dos.StoreMenuRole;
|
||||
import cn.lili.modules.member.entity.vo.StoreMenuVO;
|
||||
import cn.lili.modules.member.mapper.StoreMenuMapper;
|
||||
import cn.lili.modules.member.service.ClerkService;
|
||||
import cn.lili.modules.member.service.StoreMenuRoleService;
|
||||
import cn.lili.modules.member.service.StoreMenuService;
|
||||
import cn.lili.modules.permission.entity.dto.MenuSearchParams;
|
||||
import cn.lili.mybatis.util.PageUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -42,6 +45,12 @@ public class StoreMenuServiceImpl extends ServiceImpl<StoreMenuMapper, StoreMenu
|
||||
@Autowired
|
||||
private Cache<List<StoreMenu>> cache;
|
||||
|
||||
/**
|
||||
* 店员
|
||||
*/
|
||||
@Autowired
|
||||
private ClerkService clerkService;
|
||||
|
||||
@Override
|
||||
public void deleteIds(List<String> ids) {
|
||||
QueryWrapper<StoreMenuRole> queryWrapper = new QueryWrapper<>();
|
||||
@ -60,7 +69,10 @@ public class StoreMenuServiceImpl extends ServiceImpl<StoreMenuMapper, StoreMenu
|
||||
if (Boolean.TRUE.equals(authUser.getIsSuper())) {
|
||||
return this.tree();
|
||||
}
|
||||
List<StoreMenu> userMenus = this.baseMapper.findByUserId(authUser.getId());
|
||||
//获取当前登录用户的店员信息
|
||||
Clerk clerk = clerkService.getOne(new LambdaQueryWrapper<Clerk>().eq(Clerk::getMemberId, authUser.getId()));
|
||||
//获取当前店员角色的菜单列表
|
||||
List<StoreMenu> userMenus = this.baseMapper.findByUserId(clerk.getId());
|
||||
return this.tree(userMenus);
|
||||
}
|
||||
|
||||
|
@ -60,9 +60,10 @@ public class StoreTokenGenerate extends AbstractTokenGenerate<Member> {
|
||||
if (!clerk.getStatus()) {
|
||||
throw new ServiceException(ResultCode.CLERK_DISABLED_ERROR);
|
||||
}
|
||||
List<StoreUserMenuVO> storeUserMenuVOS = storeMenuRoleService.findAllMenu(clerk.getId());
|
||||
//获取当前用户权限
|
||||
List<StoreUserMenuVO> storeUserMenuVOS = storeMenuRoleService.findAllMenu(clerk.getId(),member.getId());
|
||||
//缓存权限列表
|
||||
cache.put(CachePrefix.PERMISSION_LIST.getPrefix(UserEnums.STORE) + clerk.getId(), this.permissionList(storeUserMenuVOS));
|
||||
cache.put(CachePrefix.PERMISSION_LIST.getPrefix(UserEnums.STORE) + member.getId(), this.permissionList(storeUserMenuVOS));
|
||||
//查询店铺信息
|
||||
Store store = storeService.getById(clerk.getStoreId());
|
||||
if (store == null) {
|
||||
@ -136,6 +137,21 @@ public class StoreTokenGenerate extends AbstractTokenGenerate<Member> {
|
||||
* @param queryPermissions 查询权限
|
||||
*/
|
||||
void initPermission(List<String> superPermissions, List<String> queryPermissions) {
|
||||
//菜单管理
|
||||
superPermissions.add("/store/menu*");
|
||||
//退出权限
|
||||
superPermissions.add("/store/passport/login/logout*");
|
||||
|
||||
|
||||
|
||||
|
||||
//店铺设置
|
||||
queryPermissions.add("/store/settings/storeSettings*");
|
||||
//文章接口
|
||||
queryPermissions.add("/store/other/article*");
|
||||
//首页统计
|
||||
queryPermissions.add("/store/statistics/index*");
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -109,19 +109,24 @@ public class ManagerTokenGenerate extends AbstractTokenGenerate<AdminUser> {
|
||||
* @param queryPermissions 查询权限
|
||||
*/
|
||||
void initPermission(List<String> superPermissions, List<String> queryPermissions) {
|
||||
//用户信息维护
|
||||
superPermissions.add("/manager/user/info*");
|
||||
superPermissions.add("/manager/user/edit*");
|
||||
superPermissions.add("/manager/user/editPassword*");
|
||||
//TODO 用户信息维护--操作权限
|
||||
//获取当前登录用户
|
||||
superPermissions.add("/manager/passport/user/info*");
|
||||
//修改用户资料
|
||||
superPermissions.add("/manager/passport/user/edit*");
|
||||
//修改密码
|
||||
superPermissions.add("/manager/passport/user/editPassword*");
|
||||
//退出
|
||||
superPermissions.add("/manager/passport/user/logout*");
|
||||
|
||||
//统计查看权限
|
||||
queryPermissions.add("/manager/statistics*");
|
||||
//菜单查看权限
|
||||
queryPermissions.add("/manager/menu*");
|
||||
queryPermissions.add("/manager/permission/menu*");
|
||||
//商品分类查看权限
|
||||
queryPermissions.add("/manager/goods/category*");
|
||||
//查看地区接口
|
||||
queryPermissions.add("/manager/region*");
|
||||
queryPermissions.add("/manager/setting/region*");
|
||||
|
||||
}
|
||||
|
||||
|
@ -75,7 +75,7 @@ public class MenuManagerController {
|
||||
return ResultUtil.data(menuService.tree());
|
||||
}
|
||||
|
||||
@ApiOperation(value = "获取所有菜单")
|
||||
@ApiOperation(value = "获取所有菜单--根据当前用户角色")
|
||||
@GetMapping("/memberMenu")
|
||||
public ResultMessage<List<MenuVO>> memberMenu() {
|
||||
return ResultUtil.data(menuService.findUserTree());
|
||||
|
@ -41,7 +41,7 @@ public class StoreMenuController {
|
||||
return ResultUtil.data(storeMenuService.tree());
|
||||
}
|
||||
|
||||
@ApiOperation(value = "获取所有菜单")
|
||||
@ApiOperation(value = "获取所有菜单---根据当前用户角色")
|
||||
@GetMapping("/memberMenu")
|
||||
public ResultMessage<List<StoreMenuVO>> memberMenu() {
|
||||
return ResultUtil.data(storeMenuService.findUserTree());
|
||||
|
@ -129,8 +129,8 @@ public class StoreAuthenticationFilter extends BasicAuthenticationFilter {
|
||||
//获取数据(GET 请求)权限
|
||||
if (request.getMethod().equals(RequestMethod.GET.name())) {
|
||||
//如果用户的超级权限和查阅权限都不包含当前请求的api
|
||||
if (match(permission.get(PermissionEnum.SUPER.name()), requestUrl) ||
|
||||
match(permission.get(PermissionEnum.QUERY.name()), requestUrl)) {
|
||||
if (match(permission.get(PermissionEnum.SUPER.name()), requestUrl)
|
||||
||match(permission.get(PermissionEnum.QUERY.name()), requestUrl)) {
|
||||
} else {
|
||||
ResponseUtil.output(response, ResponseUtil.resultMap(false, 400, "权限不足"));
|
||||
log.error("当前请求路径:{},所拥有权限:{}", requestUrl, JSONUtil.toJsonStr(permission));
|
||||
|
Loading…
x
Reference in New Issue
Block a user