spring-boot-plus V 1.4.0 통합 사용자 역할 권한 부서 관리 발표(추천)

17574 단어 springboot집성
RBAC 사용자 역할 권한
사용자 역할 권한 부서 관리 핵심 인터페이스 소개
Shiro 권한 설정
👉 Shiro 권한 설정
데이터베이스 모형 도

👉 spring-boot-plus SQL 다운로드 초기 화
인증번호 가 져 오기
  • 인증 코드 를 사용 할 지 설정 할 수 있 습 니 다
  • 기본 값
  • 사용 하지 않 음
  • 인증 코드 검 사 를 사용 하면 로그 인 할 때 verifyToken 과 code
  • 을 입력 해 야 합 니 다.
    인증번호 데모
    
    spring-boot-plus:
     #     ansi           
     enable-ansi: true
     #        
     enable-verify-code: true
    enable-verify-codetrue 으로 설정 하여 인증 코드 인증 사용 하기
    인증 코드 가 져 오기
    인증 코드 백 엔 드 는 Redis 에 저 장 됩 니 다.만 료 시간 은 기본적으로 5 분 입 니 다.

    방식 1:
    그림 을 브 라 우 저 로 출력 하고 인증 코드 token 을 응답 헤드 로 출력 합 니 다.
    http://localhost:8888/verificationCode/getImage
    
    Response Headers
    HTTP/1.1 200
    verifyToken: 6515b4b798ce49e68b1e40f98ff8eb19
    방식 2:
    Base 64 인 코딩 그림 과 인증 코드 token 가 져 오기
    http://localhost:8888/verificationCode/getBase64Image
    
    {
     "code": 200,
     "msg": "    ",
     "success": true,
     "data": {
     "image": "data:image/png;base64,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",
     "verifyToken": "42ba8abde7bc47b2b1397b4d6676956a"
     },
     "time": "2019-11-01 22:40:37"
    }
    시스템 사용자 로그 인

    POST 요청,Content-Type:application/jsonhttp://127.0.0.1:8888/login
    요청 매개 변수
    
    {
     "code": "   ",
     "password": "123456",
     "username": "admin",
     "verifyToken": "   token"
    }
    주의 하 다.
  • 인증 코드 로그 인 을 사용 하지 않 으 면 usernamepassword
  • 에 전 송 됩 니 다.
  • 전단 은 암 호 를 암호 화한 후 전송 해 야 한다
  • 로그 인 성공
  • 로그 인 사용자 정보 반환:부서/역할/권한
  • 복귀 사용자 token
  • 
    {
     "code": 200,
     "msg": "    ",
     "success": true,
     "data": {
     "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJ3ZWIiLCJpc3MiOiJzcHJpbmctYm9vdC1wbHVzIiwiZXhwIjoxNTcyNjIzMDE5LCJpYXQiOjE1NzI2MTk0MTksImp0aSI6IjdlZmVlM2UwMjc2MTRiYTc5M2I2YmYwZmE4NTgzYmUwIiwidXNlcm5hbWUiOiJhZG1pbiJ9.O3w7CNRqw_Miwp8MDzPND6w490c9Q7yFlKpFJK9ubSU",
     "loginSysUserVo": {
      "id": "1",
      "username": "admin",
      "nickname": "   ",
      "gender": 1,
      "state": 1,
      "departmentId": "1",
      "departmentName": "   ",
      "roleId": "1",
      "roleName": "   ",
      "roleCode": "admin",
      "permissionCodes": [
      "sys:permission:codes",
      "system:management",
      "sys:department:update",
      "sys:department:page",
      "sys:role:management",
      "sys:permission:add",
      "sys:user:add",
      "sys:role:page",
      "sys:permission:page",
      "sys:department:delete",
      "sys:permission:management",
      "sys:user:delete",
      "sys:department:management",
      "sys:user:page",
      "sys:user:update",
      "sys:user:update:password",
      "sys:user:update:head",
      "sys:role:add",
      "sys:permission:menu:tree",
      "sys:department:info",
      "sys:permission:all:menu:list",
      "sys:permission:info",
      "sys:role:info",
      "sys:permission:all:menu:tree",
      "sys:permission:update",
      "sys:permission:menu:list",
      "sys:role:update",
      "sys:user:info",
      "sys:user:management",
      "sys:role:delete",
      "sys:permission:delete"
      ]
     }
     },
     "time": "2019-11-01 22:43:39"
    }
  • token 의 기본 실효 시간 은 1 시간
  • 입 니 다.
  • 설정 JWT 토 큰 실효 시간
  • 
    ############################ JWT start #############################
     jwt:
     #       1  ,  : 
     expire-second: 3600
  • 배경 에서 Redis 캐 시 를 사용 하여 로그 인 사용자 정보
  • redis key
  • login:user:admin
    다른 권한 부여 접근 이 필요 한 인터페이스,요청 헤드 는 token 을 휴대 해 야 합 니 다.
    부서 트 리 목록
    부 서 는 N 레벨 로 설정 할 수 있 으 며,백 엔 드 는 재 귀 를 사용 하여 부서 목록 을 트 리 목록 으로 변환 할 수 있 습 니 다.

    SysDepartmentServiceImpl
    
    @Override
     public List<SysDepartmentTreeVo> getAllDepartmentTree() {
      List<SysDepartment> sysDepartmentList = getAllDepartmentList();
      if (CollectionUtils.isEmpty(sysDepartmentList)) {
       throw new IllegalArgumentException("SysDepartment      ");
      }
      List<SysDepartmentTreeVo> list = SysDepartmentConvert.INSTANCE.listToTreeVoList(sysDepartmentList);
      List<SysDepartmentTreeVo> treeVos = new ArrayList<>();
      for (SysDepartmentTreeVo treeVo : list) {
       if (treeVo.getParentId() == null) {
        treeVos.add(findChildren(treeVo, list));
       }
      }
      return treeVos;
     }
    
     /**
      *           
      *
      * @param tree
      * @param list
      * @return
      */
     public SysDepartmentTreeVo findChildren(SysDepartmentTreeVo tree, List<SysDepartmentTreeVo> list) {
      for (SysDepartmentTreeVo vo : list) {
       if (tree.getId().equals(vo.getParentId())) {
        if (tree.getChildren() == null) {
         tree.setChildren(new ArrayList<>());
        }
        tree.getChildren().add(findChildren(vo, list));
       }
      }
      return tree;
     }
    전단 JSON 구조
    http://127.0.0.1:8888/sysDepartment/getAllDepartmentTree
    역할 관리

    캐릭터 권한 설정
  • 핵심 코드,캐릭터 권한 삭제,캐릭터 권한 추가
  • 집합 을 구 하 는 차 집
  • SysRolePermissionServiceImpl
  • 
    @Transactional(rollbackFor = Exception.class)
     @Override
     public boolean updateSysRole(UpdateSysRoleParam updateSysRoleParam) throws Exception {
      Long roleId = updateSysRoleParam.getId();
      List<Long> permissionIds = updateSysRoleParam.getPermissionIds();
      //         
      SysRole sysRole = getById(roleId);
      if (sysRole == null) {
       throw new BusinessException("      ");
      }
      //           
      if (!sysPermissionService.isExistsByPermissionIds(permissionIds)) {
       throw new BusinessException("    id    ");
      }
    
      //     
      sysRole.setName(updateSysRoleParam.getName())
        .setType(updateSysRoleParam.getType())
        .setRemark(updateSysRoleParam.getRemark())
        .setState(updateSysRoleParam.getState())
        .setUpdateTime(new Date());
      boolean updateResult = updateById(sysRole);
      if (!updateResult) {
       throw new DaoException("        ");
      }
    
      //        id  
      List<Long> beforeList = sysRolePermissionService.getPermissionIdsByRoleId(roleId);
      //     
      // before:1,2,3,4,5,6
      // after: 1,2,3,4,7,8
      //   5,6   7,8
      //       ,  deleted   @TableLogic  
      Set<Long> beforeSet = new HashSet<>(beforeList);
      Set<Long> afterSet = new HashSet<>(permissionIds);
      SetUtils.SetView deleteSet = SetUtils.difference(beforeSet, afterSet);
      SetUtils.SetView addSet = SetUtils.difference(afterSet, beforeSet);
      log.debug("deleteSet = " + deleteSet);
      log.debug("addSet = " + addSet);
    
      //       
      UpdateWrapper updateWrapper = new UpdateWrapper();
      updateWrapper.eq("role_id",roleId);
      updateWrapper.in("permission_id",deleteSet);
      boolean deleteResult = sysRolePermissionService.remove(updateWrapper);
      if (!deleteResult) {
       throw new DaoException("          ");
      }
      //       
      boolean addResult = sysRolePermissionService.saveSysRolePermissionBatch(roleId, addSet);
      if (!addResult) {
       throw new DaoException("          ");
      }
      return true;
     }
    권한 관리

    권한 트 리 목록
  • 사용자 가 캐릭터 권한 을 설정 할 때
  • 을 선택 하 십시오.
  • 권한 메뉴 권한 은 메뉴 와 기능 권한
  • 으로 나 뉜 다.
  • 배경 에서 3 층 권한 트 리
  • 가 져 오기
    
    @Override
     public List<SysPermissionTreeVo> getAllMenuTree() throws Exception {
      List<SysPermission> list = getAllMenuList();
      //        
      List<SysPermissionTreeVo> treeVos = convertSysPermissionTreeVoList(list);
      return treeVos;
     }
    
     @Override
     public List<SysPermissionTreeVo> convertSysPermissionTreeVoList(List<SysPermission> list) {
      if (CollectionUtils.isEmpty(list)) {
       throw new IllegalArgumentException("SysPermission      ");
      }
      //  level    map
      Map<Integer, List<SysPermission>> map = list.stream().collect(Collectors.groupingBy(SysPermission::getLevel));
      List<SysPermissionTreeVo> treeVos = new ArrayList<>();
      //             
      for (SysPermission one : map.get(LevelEnum.ONE.getKey())) {
       SysPermissionTreeVo oneVo = SysPermissionConvert.INSTANCE.permissionToTreeVo(one);
       Long oneParentId = oneVo.getParentId();
       if (oneParentId == null || oneParentId == 0) {
        treeVos.add(oneVo);
       }
       List<SysPermission> twoList = map.get(LevelEnum.TWO.getKey());
       if (CollectionUtils.isNotEmpty(twoList)) {
        for (SysPermission two : twoList) {
         SysPermissionTreeVo twoVo = SysPermissionConvert.INSTANCE.permissionToTreeVo(two);
         if (two.getParentId().equals(one.getId())) {
          oneVo.getChildren().add(twoVo);
         }
         List<SysPermission> threeList = map.get(LevelEnum.THREE.getKey());
         if (CollectionUtils.isNotEmpty(threeList)) {
          for (SysPermission three : threeList) {
           if (three.getParentId().equals(two.getId())) {
            SysPermissionTreeVo threeVo = SysPermissionConvert.INSTANCE.permissionToTreeVo(three);
            twoVo.getChildren().add(threeVo);
           }
          }
         }
        }
       }
    
      }
      return treeVos;
     }
    전단 JSON 형식
    http://127.0.0.1:8888/sysPermission/getAllMenuTree
    권한 인 코딩 목록
    현재 사용자 의 모든 권한 인 코딩 을 되 돌려 줍 니 다.전단 에 네 비게 이 션 메뉴 와 기능 단 추 를 보 여 줍 니 다.
    http://127.0.0.1:8888/sysPermission/getPermissionCodesByUserId/1
    
    {
     "code": 200,
     "msg": "    ",
     "success": true,
     "data": [
     "system:management",
     "system:management",
     "sys:user:management",
     "sys:user:management",
     "sys:role:management",
     "sys:permission:management",
     "sys:department:management",
     "sys:user:add",
     "sys:user:add",
     "sys:user:update",
     "sys:user:update",
     "sys:user:delete",
     "sys:user:delete",
     "sys:user:info",
     "sys:user:info",
     "sys:user:page",
     "sys:user:page",
     "sys:user:update:password",
     "sys:user:update:head",
     "sys:role:add",
     "sys:role:update",
     "sys:role:delete",
     "sys:role:info",
     "sys:role:page",
     "sys:permission:add",
     "sys:permission:update",
     "sys:permission:delete",
     "sys:permission:info",
     "sys:permission:page",
     "sys:permission:all:menu:list",
     "sys:permission:all:menu:tree",
     "sys:permission:menu:list",
     "sys:permission:menu:tree",
     "sys:permission:codes",
     "sys:department:update",
     "sys:department:delete",
     "sys:department:info",
     "sys:department:page"
     ],
     "time": "2019-11-02 00:32:17"
    }
    주의 하 다.
    Shiro 주석@RequiresPermissions 를 사용 하여 controller 방법 권한 필터 링@RequiresPermissions("sys:department:add")코드 생 성 시 Requires Permissions 주석 생 성 설정 가능
    
     //     Shiro RequiresPermissions  
      codeGenerator.setRequiresPermissions(true);
    생 성 또는 추 가 된 controller 방법,권한 관리 가 필요 합 니 다.syspermission 표 에 권한 인 코딩 기록 을 추가 하고 해당 캐릭터 에 권한 을 부여 합 니 다.
    총결산
    위 에서 말씀 드 린 것 은 편집장 님 께 서 소개 해 주신 spring-boot-plus V 1.4.0 이 통합 사용자 역할 권한 부서 관 리 를 발표 하여 여러분 께 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
    만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!

    좋은 웹페이지 즐겨찾기