Skip to content

Commit

Permalink
Merge pull request #29 from hiparker/development
Browse files Browse the repository at this point in the history
Development
  • Loading branch information
hiparker committed Mar 16, 2023
2 parents f164f66 + 7c06309 commit 8567275
Show file tree
Hide file tree
Showing 11 changed files with 196 additions and 103 deletions.
10 changes: 10 additions & 0 deletions db-file/2.0版本/2.0 => 2.1.0 升级SQL.sql
@@ -0,0 +1,10 @@
-- 删除vue2 组件菜单
delete from sys_menu
where parent_ids like '0,1314068325453574145,1314071137365307394%'
or parent_ids like '0,1314068325453574145,1314123690283114498%';


-- 清理用户权限垃圾数据
delete ref from sys_role_menu_ref ref
left join sys_menu m on m.id = ref.menu_id
where m.id is null;
125 changes: 32 additions & 93 deletions db-file/2.0版本/opsli-boot.sql

Large diffs are not rendered by default.

Expand Up @@ -100,6 +100,14 @@ public interface MenuApi {
ResultWrapper<List<MenuModel>> findList();


/**
* 菜单 查一条
* @param parentId 父级ID
* @return ResultWrapper
*/
@GetMapping("/getParent")
ResultWrapper<MenuModel> getParent(String parentId);

/**
* 菜单 查一条
* @param model 模型
Expand Down
Expand Up @@ -18,6 +18,7 @@
import org.opsli.api.base.result.ResultWrapper;
import org.opsli.api.wrapper.system.role.RoleMenuRefModel;
import org.opsli.api.wrapper.system.role.RoleModel;
import org.opsli.common.annotation.ApiVersion;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
Expand Down Expand Up @@ -54,6 +55,15 @@ public interface RoleMenuRefApi {
@GetMapping("/getPerms")
ResultWrapper<?> getPerms(RoleMenuRefModel model);

/**
* 获得当前已有权限
* @param model 角色Id
* @return ResultWrapper
*/
@ApiVersion(2)
@GetMapping("/getPerms")
ResultWrapper<?> getPermsV2(RoleMenuRefModel model);

/**
* 设置权限
* @param model roleId 角色Id
Expand All @@ -63,4 +73,14 @@ public interface RoleMenuRefApi {
@PostMapping("/setPerms")
ResultWrapper<?> setPerms(@RequestBody RoleMenuRefModel model);

/**
* 设置权限
* @param model roleId 角色Id
* @param model permsIds 权限Id 数组
* @return ResultWrapper
*/
@PostMapping("/setPerms")
@ApiVersion(2)
ResultWrapper<?> setPermsV2(@RequestBody RoleMenuRefModel model);

}
Expand Up @@ -17,9 +17,7 @@

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.*;
import org.opsli.common.annotation.validator.Validator;
import org.opsli.common.annotation.validator.ValidatorLenMax;
import org.opsli.common.enums.ValidatorType;
Expand All @@ -35,6 +33,8 @@
@Data
@EqualsAndHashCode(callSuper = false)
@ExcelIgnoreUnannotated
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserRoleRefModel implements Serializable {

Expand Down
Expand Up @@ -13,15 +13,14 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.opsli.core.log.bus;
package org.opsli.core.eventbus;

import com.google.common.eventbus.AsyncEventBus;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.SubscriberExceptionContext;
import com.google.common.eventbus.SubscriberExceptionHandler;
import lombok.extern.slf4j.Slf4j;
import org.opsli.common.thread.ThreadPoolFactory;
import org.opsli.core.eventbus.AbstractSpringEventBus;
import org.springframework.stereotype.Component;

import java.util.concurrent.ThreadPoolExecutor;
Expand All @@ -34,11 +33,11 @@
*/
@Component
@Slf4j
public class OperationLogEventBus extends AbstractSpringEventBus implements SubscriberExceptionHandler {
public class SpringEventBus extends AbstractSpringEventBus implements SubscriberExceptionHandler {

private final EventBus eventBus;

public OperationLogEventBus() {
public SpringEventBus() {
// 异步事件配置线程池
eventBus = new AsyncEventBus(
ThreadPoolFactory.createInitThreadPool(5, 10, 60, TimeUnit.SECONDS,
Expand Down
Expand Up @@ -29,7 +29,7 @@
import org.opsli.core.holder.UserContextHolder;
import org.opsli.core.log.annotation.OperateLogger;
import org.opsli.core.log.bean.OperationLog;
import org.opsli.core.log.bus.OperationLogEventBus;
import org.opsli.core.eventbus.SpringEventBus;
import org.opsli.core.log.enums.LogLevelEnum;
import org.opsli.core.log.enums.LogScopeEnum;
import org.opsli.core.utils.UserTokenUtil;
Expand Down Expand Up @@ -57,7 +57,7 @@ public class OperateLogAspect {
private static final String RE = "\\$\\{([\\w\\.\\-\\/\\+\\$\\#\\@\\!\\^\\&\\(\\)]+)\\}";

@Resource
private OperationLogEventBus operationLogEventBus;
private SpringEventBus springEventBus;

@Pointcut("@annotation(org.opsli.core.log.annotation.OperateLogger)")
public void operationLog(){}
Expand Down Expand Up @@ -156,7 +156,7 @@ private void addOperationLog(JoinPoint joinPoint, Object result, long time){
}
// 存入数据库
if(annotation.db()){
operationLogEventBus.post(operationLog);
springEventBus.post(operationLog);
}
}

Expand Down
Expand Up @@ -287,6 +287,29 @@ public ResultWrapper<MenuModel> get(MenuModel model) {
return ResultWrapper.getSuccessResultWrapper(model);
}

/**
* 菜单 查一条
* @param parentId 父节点ID
* @return ResultWrapper
*/
@ApiOperation(value = "获得单条菜单", notes = "获得单条菜单 - ID")
@PreAuthorize("hasAuthority('system_menu_select')")
@Override
public ResultWrapper<MenuModel> getParent(String parentId) {
if(StringUtils.isBlank(parentId)){
return ResultWrapper.getSuccessResultWrapper(null);
}
MenuModel model;
if(StringUtils.equals(MenuConstants.GEN_ID, parentId)){
// 生成根节点菜单
model = getGenMenuModel();
}else{
model = IService.get(parentId);
}

return ResultWrapper.getSuccessResultWrapper(model);
}

/**
* 菜单 查询分页
* @param pageNo 当前页
Expand Down
Expand Up @@ -42,6 +42,14 @@ public interface IRoleMenuRefService {
*/
boolean setPerms(String roleId,String[] permsIds);

/**
* 保存权限(兼容Vue3)
* @param roleId 角色ID
* @param permsIds 权限集合
* @return boolean
*/
boolean setPermsV2(String roleId,String[] permsIds);

/**
* 根据角色ID 移除对应 权限数据
* @param roleIds 角色ID
Expand Down
Expand Up @@ -88,6 +88,38 @@ public boolean setPerms(String roleId, String[] permsIds) {
return true;
}

/**
* 兼容Vue3 设置权限
* @param roleId 角色ID
* @param permsIds 权限集合
* @return boolean
*/
@Override
@Transactional(rollbackFor = Exception.class)
public boolean setPermsV2(String roleId, String[] permsIds) {
if(StringUtils.isEmpty(roleId)){
throw new ServiceException(SystemMsg.EXCEPTION_ROLE_ID_NOT_NULL);
}

// 删除已有权限
this.delPermsByRoleIds(Convert.toList(String.class, roleId));

List<SysRoleMenuRef> list = Lists.newArrayListWithCapacity(permsIds.length);
for (String permsId : permsIds) {
SysRoleMenuRef entity = new SysRoleMenuRef();
entity.setRoleId(roleId);
entity.setMenuId(permsId);
list.add(entity);
}
boolean ret = super.saveBatch(list);
if(ret){
// 清除缓存
this.clearCache(roleId);
}
return ret;
}


@Override
@Transactional(rollbackFor = Exception.class)
public boolean delPermsByMenuIds(List<String> menuIds){
Expand Down
Expand Up @@ -19,6 +19,7 @@
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.opsli.common.annotation.ApiVersion;
import org.opsli.core.log.annotation.OperateLogger;
import org.opsli.core.log.enums.ModuleEnum;
import org.opsli.core.log.enums.OperationTypeEnum;
Expand All @@ -37,6 +38,7 @@
import org.opsli.modulars.system.menu.entity.SysMenu;
import org.opsli.modulars.system.role.service.IRoleMenuRefService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -93,6 +95,31 @@ public ResultWrapper<?> getPerms(RoleMenuRefModel model) {
return ResultWrapper.getSuccessResultWrapper(permsIds);
}

/**
* 获得当前已有权限 (针对Vue3 兼容)
* @param model roleId 角色Id
* @return ResultWrapper
*/
@PreAuthorize("hasAuthority('system_role_setMenuPerms')")
@Override
@ApiVersion(2)
public ResultWrapper<?> getPermsV2(RoleMenuRefModel model) {
if(model == null){
return ResultWrapper.getCustomResultWrapper(SystemMsg.EXCEPTION_ROLE_ID_NOT_NULL);
}

List<SysMenu> perms = iRoleMenuRefService.getPerms(model.getRoleId());
List<String> permsIds = Lists.newArrayListWithCapacity(perms.size());
if(!perms.isEmpty()){
for (SysMenu perm : perms) {
permsIds.add(perm.getId());
}
}

return ResultWrapper.getSuccessResultWrapper(permsIds);
}


/**
* 设置菜單权限
* @param model 模型
Expand Down Expand Up @@ -120,6 +147,33 @@ public ResultWrapper<?> setPerms(RoleMenuRefModel model) {
}


/**
* 设置菜單权限
* @param model 模型
* @return ResultWrapper
*/
@PreAuthorize("hasAuthority('system_role_setMenuPerms')")
@OperateLogger(description = "设置菜單权限",
module = ModuleEnum.MODULE_ROLE, operationType = OperationTypeEnum.UPDATE, db = true)
@Override
public ResultWrapper<?> setPermsV2(RoleMenuRefModel model) {
// 演示模式 不允许操作
this.demoError();

if(model == null){
return ResultWrapper.getErrorResultWrapper().setMsg("设置权限失败");
}

boolean ret = iRoleMenuRefService.setPermsV2(model.getRoleId(),
model.getPermsIds());
if(ret){
return ResultWrapper.getSuccessResultWrapper();
}
// 权限设置失败
return ResultWrapper.getCustomResultWrapper(SystemMsg.EXCEPTION_ROLE_PERMS_ERROR);
}


/**
* 演示模式
*/
Expand Down

0 comments on commit 8567275

Please sign in to comment.