diff --git a/ebike-staff/src/main/java/com/cdzy/staff/controller/EbikeRolePermissionController.java b/ebike-staff/src/main/java/com/cdzy/staff/controller/EbikeRolePermissionController.java index fa36357..048885e 100644 --- a/ebike-staff/src/main/java/com/cdzy/staff/controller/EbikeRolePermissionController.java +++ b/ebike-staff/src/main/java/com/cdzy/staff/controller/EbikeRolePermissionController.java @@ -3,13 +3,19 @@ package com.cdzy.staff.controller; import com.cdzy.common.model.request.PageParam; import com.cdzy.common.model.response.JsonResult; import com.cdzy.staff.model.entity.EbikeRolePermission; +import com.cdzy.staff.model.vo.EbikeRolePermissionVo; import com.cdzy.staff.service.EbikeRolePermissionService; import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; import jakarta.annotation.Resource; +import jakarta.validation.constraints.NotNull; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; +import static com.cdzy.staff.model.entity.table.EbikeRolePermissionTableDef.EBIKE_ROLE_PERMISSION; + /** * 角色-权限映射表 控制层。 * @@ -24,74 +30,29 @@ public class EbikeRolePermissionController { private EbikeRolePermissionService ebikeRolePermissionService; /** - * 添加角色-权限映射表。 + * 分配角色权限。 * * @param ebikeRolePermission 角色-权限映射表 * @return {@code true} 添加成功,{@code false} 添加失败 */ - @PostMapping("save") - public JsonResult save(@RequestBody EbikeRolePermission ebikeRolePermission) { - ebikeRolePermissionService.save(ebikeRolePermission); + @PostMapping("allocate") + public JsonResult allocate(@Validated @RequestBody EbikeRolePermissionVo ebikeRolePermission) { + ebikeRolePermissionService.allocate(ebikeRolePermission); return JsonResult.success(); } /** - * 根据主键删除角色-权限映射表。 + * 获取角色权限。 * - * @param id 主键 - * @return {@code true} 删除成功,{@code false} 删除失败 - */ - @PostMapping("remove/{id}") - public JsonResult remove(@PathVariable Long id) { - ebikeRolePermissionService.removeById(id); - return JsonResult.success(); - } - - /** - * 根据主键更新角色-权限映射表。 - * - * @param ebikeRolePermission 角色-权限映射表 - * @return {@code true} 更新成功,{@code false} 更新失败 - */ - @PostMapping("update") - public JsonResult update(@RequestBody EbikeRolePermission ebikeRolePermission) { - ebikeRolePermissionService.updateById(ebikeRolePermission); - return JsonResult.success(); - } - - /** - * 查询所有角色-权限映射表。 - * - * @return 所有数据 + * @param roleId 角色ID + * @return {@code true} 添加成功,{@code false} 添加失败 */ @GetMapping("list") - public JsonResult list() { - List list = ebikeRolePermissionService.list(); + public JsonResult list(@NotNull(message = "角色ID不能为空") Long roleId) { + QueryWrapper queryWrapper = QueryWrapper.create() + .where(EBIKE_ROLE_PERMISSION.ROLE_ID.eq(roleId)) + .where(EBIKE_ROLE_PERMISSION.IS_EMPOWER.eq(Boolean.FALSE)); + List list = ebikeRolePermissionService.listAs(queryWrapper, Long.class); return JsonResult.success(list); } - - /** - * 根据角色-权限映射表主键获取详细信息。 - * - * @param id 角色-权限映射表主键 - * @return 角色-权限映射表详情 - */ - @GetMapping("getInfo/{id}") - public JsonResult getInfo(@PathVariable Long id) { - EbikeRolePermission ebikeRolePermission = ebikeRolePermissionService.getById(id); - return JsonResult.success(ebikeRolePermission); - } - - /** - * 分页查询角色-权限映射表。 - * - * @param pageParam 分页对象 - * @return 分页对象 - */ - @GetMapping("page") - public JsonResult page(PageParam pageParam) { - Page page = ebikeRolePermissionService.page(pageParam.getPage()); - return JsonResult.success(page); - } - } diff --git a/ebike-staff/src/main/java/com/cdzy/staff/model/entity/EbikeRolePermission.java b/ebike-staff/src/main/java/com/cdzy/staff/model/entity/EbikeRolePermission.java index 34c4ef6..83acb02 100644 --- a/ebike-staff/src/main/java/com/cdzy/staff/model/entity/EbikeRolePermission.java +++ b/ebike-staff/src/main/java/com/cdzy/staff/model/entity/EbikeRolePermission.java @@ -38,13 +38,17 @@ public class EbikeRolePermission implements Serializable { private Long createBy; + @Column(onInsertValue = "now()") private LocalDateTime createTime; private Long updateBy; + @Column(onUpdateValue = "now()") private LocalDateTime updateTime; @Column(isLogicDelete = true) private Boolean isDeleted; + private Boolean isEmpower; + } diff --git a/ebike-staff/src/main/java/com/cdzy/staff/model/vo/EbikeRolePermissionVo.java b/ebike-staff/src/main/java/com/cdzy/staff/model/vo/EbikeRolePermissionVo.java new file mode 100644 index 0000000..0c3ab5e --- /dev/null +++ b/ebike-staff/src/main/java/com/cdzy/staff/model/vo/EbikeRolePermissionVo.java @@ -0,0 +1,35 @@ +package com.cdzy.staff.model.vo; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 角色-权限映射表 实体类。 + * + * @author loves + * @since 2025-08-08 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EbikeRolePermissionVo implements Serializable { + + @NotNull(message = "角色ID不能为空") + private Long roleId; + + @NotNull(message = "角色权限不能为空") + private List permissionIds; +} diff --git a/ebike-staff/src/main/java/com/cdzy/staff/service/EbikeRolePermissionService.java b/ebike-staff/src/main/java/com/cdzy/staff/service/EbikeRolePermissionService.java index 4bcdc31..00600de 100644 --- a/ebike-staff/src/main/java/com/cdzy/staff/service/EbikeRolePermissionService.java +++ b/ebike-staff/src/main/java/com/cdzy/staff/service/EbikeRolePermissionService.java @@ -1,5 +1,6 @@ package com.cdzy.staff.service; +import com.cdzy.staff.model.vo.EbikeRolePermissionVo; import com.mybatisflex.core.service.IService; import com.cdzy.staff.model.entity.EbikeRolePermission; @@ -11,4 +12,5 @@ import com.cdzy.staff.model.entity.EbikeRolePermission; */ public interface EbikeRolePermissionService extends IService { + void allocate(EbikeRolePermissionVo ebikeRolePermission); } diff --git a/ebike-staff/src/main/java/com/cdzy/staff/service/impl/EbikeRolePermissionServiceImpl.java b/ebike-staff/src/main/java/com/cdzy/staff/service/impl/EbikeRolePermissionServiceImpl.java index 926f9a6..c8e9be6 100644 --- a/ebike-staff/src/main/java/com/cdzy/staff/service/impl/EbikeRolePermissionServiceImpl.java +++ b/ebike-staff/src/main/java/com/cdzy/staff/service/impl/EbikeRolePermissionServiceImpl.java @@ -1,10 +1,26 @@ package com.cdzy.staff.service.impl; +import cn.dev33.satoken.stp.StpUtil; +import com.cdzy.common.ex.EbikeException; +import com.cdzy.staff.mapper.EbikePermissionMapper; +import com.cdzy.staff.mapper.EbikeRoleMapper; +import com.cdzy.staff.model.entity.EbikePermission; +import com.cdzy.staff.model.entity.EbikeRole; +import com.cdzy.staff.model.vo.EbikeRolePermissionVo; +import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; import com.cdzy.staff.model.entity.EbikeRolePermission; import com.cdzy.staff.mapper.EbikeRolePermissionMapper; import com.cdzy.staff.service.EbikeRolePermissionService; +import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +import static com.cdzy.staff.model.entity.table.EbikePermissionTableDef.EBIKE_PERMISSION; +import static com.cdzy.staff.model.entity.table.EbikeRolePermissionTableDef.EBIKE_ROLE_PERMISSION; /** * 角色-权限映射表 服务层实现。 @@ -13,6 +29,69 @@ import org.springframework.stereotype.Service; * @since 2025-08-07 */ @Service -public class EbikeRolePermissionServiceImpl extends ServiceImpl implements EbikeRolePermissionService{ +public class EbikeRolePermissionServiceImpl extends ServiceImpl implements EbikeRolePermissionService { + @Resource + private EbikeRoleMapper ebikeRoleMapper; + + @Resource + private EbikeRolePermissionMapper rolePermissionMapper; + + @Resource + private EbikePermissionMapper permissionMapper; + + @Override + @Transactional + public void allocate(EbikeRolePermissionVo ebikeRolePermission) { + Long roleId = ebikeRolePermission.getRoleId(); + checkRole(roleId); + List permissionIds = ebikeRolePermission.getPermissionIds(); + long loginId = StpUtil.getLoginIdAsLong(); + if (permissionIds != null && !permissionIds.isEmpty()) { + QueryWrapper queryWrapper = QueryWrapper.create() + .where(EBIKE_ROLE_PERMISSION.ROLE_ID.eq(roleId)); + rolePermissionMapper.deleteByQuery(queryWrapper); + + //获取所有有效权限id + queryWrapper.clear(); + queryWrapper.where(EBIKE_PERMISSION.PERMISSION_ID.in(permissionIds)); + List ebikePermissions = permissionMapper.selectListByQuery(queryWrapper); + + permissionIds.clear(); + if (ebikePermissions != null && !ebikePermissions.isEmpty()) { + List parentIds = new ArrayList<>(); + //父级授权 + for (EbikePermission ebikePermission : ebikePermissions) { + permissionIds.add(ebikePermission.getPermissionId()); + if (ebikePermission.getParentId() != null) { + parentIds.add(ebikePermission.getParentId()); + } + } + List rolePermissions = permissionIds.stream().map(permissionId -> EbikeRolePermission.builder() + .roleId(roleId) + .permissionId(permissionId) + .createBy(loginId) + .isEmpower(false) + .build()).toList(); + List parentRolePermissions = parentIds.stream().map(permissionId -> EbikeRolePermission.builder() + .roleId(roleId) + .permissionId(permissionId) + .createBy(loginId) + .isEmpower(true) + .build()).toList(); + rolePermissionMapper.insertBatch(rolePermissions); + rolePermissionMapper.insertBatch(parentRolePermissions); + } + } + } + + private void checkRole(Long roleId) { + EbikeRole ebikeRole = ebikeRoleMapper.selectOneById(roleId); + if (ebikeRole == null) { + throw new EbikeException("该角色不存在"); + } +// if (ebikeRole.getSysAdmin()){ +// throw new EbikeException("系统管理员无需授权"); +// } + } } diff --git a/ebike-staff/src/main/resources/db/init.sql b/ebike-staff/src/main/resources/db/init.sql index df2cc7b..a892595 100644 --- a/ebike-staff/src/main/resources/db/init.sql +++ b/ebike-staff/src/main/resources/db/init.sql @@ -237,20 +237,12 @@ ALTER TABLE "public"."ebike_permission" ADD CONSTRAINT "ebike_permission_pkey" P -- ---------------------------- ALTER TABLE "public"."ebike_role" ADD CONSTRAINT "ebike_role_pkey" PRIMARY KEY ("role_id"); --- ---------------------------- --- Uniques structure for table ebike_role_permission --- ---------------------------- -ALTER TABLE "public"."ebike_role_permission" ADD CONSTRAINT "ebike_role_permission_role_id_permission_id_key" UNIQUE ("role_id", "permission_id"); -- ---------------------------- -- Primary Key structure for table ebike_role_permission -- ---------------------------- ALTER TABLE "public"."ebike_role_permission" ADD CONSTRAINT "ebike_role_permission_pkey" PRIMARY KEY ("role_permission_id"); --- ---------------------------- --- Uniques structure for table ebike_staff_role --- ---------------------------- -ALTER TABLE "public"."ebike_staff_role" ADD CONSTRAINT "ebike_staff_role_staff_id_role_id_key" UNIQUE ("staff_id", "role_id"); -- ---------------------------- -- Primary Key structure for table ebike_staff_role diff --git a/ebike-staff/src/test/java/com/cdzy/staff/RoleTest.java b/ebike-staff/src/test/java/com/cdzy/staff/RoleTest.java index 181b3be..2ac33ca 100644 --- a/ebike-staff/src/test/java/com/cdzy/staff/RoleTest.java +++ b/ebike-staff/src/test/java/com/cdzy/staff/RoleTest.java @@ -2,8 +2,10 @@ package com.cdzy.staff; import com.cdzy.common.utils.SHA256WithSaltUtil; import com.cdzy.staff.mapper.EbikeRoleMapper; +import com.cdzy.staff.mapper.EbikeRolePermissionMapper; import com.cdzy.staff.mapper.EbikeStaffRoleMapper; import com.cdzy.staff.model.entity.EbikeRole; +import com.cdzy.staff.model.entity.EbikeRolePermission; import com.cdzy.staff.model.entity.EbikeStaffRole; import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; @@ -18,6 +20,9 @@ public class RoleTest { @Resource EbikeStaffRoleMapper staffRoleMapper; + @Resource + EbikeRolePermissionMapper rolePermissionMapper; + @Test public void test() { EbikeRole role = new EbikeRole(); @@ -35,4 +40,14 @@ public class RoleTest { staffRoleMapper.insert(role); } + @Test + public void testStaffRolPermission() { + EbikeRolePermission rolePermission = EbikeRolePermission.builder() + .roleId(312523146360233984L) + .permissionId(321418032472608768L) + .isEmpower(true) + .build(); + rolePermissionMapper.insert(rolePermission); + } + }