'店员权限bug处理合并'

This commit is contained in:
fengtianyangyang 2022-03-03 18:03:04 +08:00
parent 4d551366ed
commit a82d3fe57c
14 changed files with 88 additions and 44 deletions

View File

@ -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();

View File

@ -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 {
}
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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);
/**

View File

@ -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()) {

View File

@ -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);
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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*");
}

View File

@ -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*");
}

View File

@ -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());

View File

@ -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());

View File

@ -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));