Browse Source

角色权限

master
liugw 5 years ago
parent
commit
dcfdb3c2af
83 changed files with 5780 additions and 2 deletions
  1. 10
    1
      pom.xml
  2. 46
    0
      src/main/java/com/xdf/creative/base/params/creative/AddSysRoleParam.java
  3. 18
    0
      src/main/java/com/xdf/creative/base/params/creative/IsEnableSysOrganizeParam.java
  4. 60
    0
      src/main/java/com/xdf/creative/base/params/creative/SysOrganizeQueryParam.java
  5. 79
    0
      src/main/java/com/xdf/creative/base/params/creative/SysPermissionQueryParam.java
  6. 24
    0
      src/main/java/com/xdf/creative/base/params/creative/SysRolePermissionQueryParam.java
  7. 24
    0
      src/main/java/com/xdf/creative/base/params/creative/SysRoleQueryParam.java
  8. 24
    0
      src/main/java/com/xdf/creative/base/params/creative/SysUserQueryParam.java
  9. 45
    0
      src/main/java/com/xdf/creative/base/params/creative/SysUserRoleQueryParam.java
  10. 37
    0
      src/main/java/com/xdf/creative/base/params/creative/UpdatePasswordParam.java
  11. 48
    0
      src/main/java/com/xdf/creative/base/params/creative/UpdateSysRoleParam.java
  12. 55
    0
      src/main/java/com/xdf/creative/base/params/creative/UpdateUserParam.java
  13. 58
    0
      src/main/java/com/xdf/creative/base/vo/creative/SysOrganizeQueryVo.java
  14. 72
    0
      src/main/java/com/xdf/creative/base/vo/creative/SysPermissionQueryVo.java
  15. 89
    0
      src/main/java/com/xdf/creative/base/vo/creative/SysPermissionTreeVo.java
  16. 65
    0
      src/main/java/com/xdf/creative/base/vo/creative/SysRolePermissionQueryVo.java
  17. 68
    0
      src/main/java/com/xdf/creative/base/vo/creative/SysRoleQueryVo.java
  18. 102
    0
      src/main/java/com/xdf/creative/base/vo/creative/SysUserQueryVo.java
  19. 36
    0
      src/main/java/com/xdf/creative/base/vo/creative/SysUserRoleQueryVo.java
  20. 15
    0
      src/main/java/com/xdf/creative/enums/BaseTypeStateEnum.java
  21. 30
    0
      src/main/java/com/xdf/creative/enums/LevelEnum.java
  22. 22
    0
      src/main/java/com/xdf/creative/enums/StateEnum.java
  23. 91
    0
      src/main/java/com/xdf/creative/module/controller/SysOrganizeController.java
  24. 170
    0
      src/main/java/com/xdf/creative/module/controller/SysPermissionController.java
  25. 99
    0
      src/main/java/com/xdf/creative/module/controller/SysRoleController.java
  26. 122
    0
      src/main/java/com/xdf/creative/module/controller/SysUserController.java
  27. 57
    0
      src/main/java/com/xdf/creative/module/entity/SysOrganize.java
  28. 94
    0
      src/main/java/com/xdf/creative/module/entity/SysPermission.java
  29. 67
    0
      src/main/java/com/xdf/creative/module/entity/SysRole.java
  30. 65
    0
      src/main/java/com/xdf/creative/module/entity/SysRolePermission.java
  31. 98
    0
      src/main/java/com/xdf/creative/module/entity/SysUser.java
  32. 44
    0
      src/main/java/com/xdf/creative/module/entity/SysUserRole.java
  33. 56
    0
      src/main/java/com/xdf/creative/module/mapper/SysOrganizeMapper.java
  34. 83
    0
      src/main/java/com/xdf/creative/module/mapper/SysPermissionMapper.java
  35. 47
    0
      src/main/java/com/xdf/creative/module/mapper/SysRoleMapper.java
  36. 51
    0
      src/main/java/com/xdf/creative/module/mapper/SysRolePermissionMapper.java
  37. 46
    0
      src/main/java/com/xdf/creative/module/mapper/SysUserMapper.java
  38. 43
    0
      src/main/java/com/xdf/creative/module/mapper/SysUserRoleMapper.java
  39. 46
    0
      src/main/java/com/xdf/creative/module/service/SysOrganizeService.java
  40. 139
    0
      src/main/java/com/xdf/creative/module/service/SysPermissionService.java
  41. 77
    0
      src/main/java/com/xdf/creative/module/service/SysRolePermissionService.java
  42. 96
    0
      src/main/java/com/xdf/creative/module/service/SysRoleService.java
  43. 37
    0
      src/main/java/com/xdf/creative/module/service/SysUserRoleService.java
  44. 132
    0
      src/main/java/com/xdf/creative/module/service/SysUserService.java
  45. 61
    0
      src/main/java/com/xdf/creative/module/service/impl/SysOrganizeServiceImpl.java
  46. 187
    0
      src/main/java/com/xdf/creative/module/service/impl/SysPermissionServiceImpl.java
  47. 94
    0
      src/main/java/com/xdf/creative/module/service/impl/SysRolePermissionServiceImpl.java
  48. 217
    0
      src/main/java/com/xdf/creative/module/service/impl/SysRoleServiceImpl.java
  49. 48
    0
      src/main/java/com/xdf/creative/module/service/impl/SysUserRoleServiceImpl.java
  50. 358
    0
      src/main/java/com/xdf/creative/module/service/impl/SysUserServiceImpl.java
  51. 90
    0
      src/main/java/com/xdf/creative/shiro/CustomRealm.java
  52. 31
    0
      src/main/java/com/xdf/creative/shiro/GlobalExceptionHandler.java
  53. 103
    0
      src/main/java/com/xdf/creative/shiro/ShiroConfig.java
  54. 23
    0
      src/main/java/com/xdf/creative/shiro/StatelessWebSubjectFactory.java
  55. 121
    0
      src/main/java/com/xdf/creative/shiro/filter/ShiroFilterChainManager.java
  56. 81
    0
      src/main/java/com/xdf/creative/shiro/jwt/JwtProperties.java
  57. 91
    0
      src/main/java/com/xdf/creative/shiro/jwt/JwtToken.java
  58. 77
    0
      src/main/java/com/xdf/creative/shiro/jwt/JwtTokenUtil.java
  59. 256
    0
      src/main/java/com/xdf/creative/shiro/jwt/JwtUtil.java
  60. 53
    0
      src/main/java/com/xdf/creative/shiro/jwt/SaltUtil.java
  61. 21
    0
      src/main/java/com/xdf/creative/shiro/match/PasswordMatcher.java
  62. 35
    0
      src/main/java/com/xdf/creative/support/auth/LoginParam.java
  63. 28
    0
      src/main/java/com/xdf/creative/support/auth/LoginSysUserTokenVo.java
  64. 61
    0
      src/main/java/com/xdf/creative/support/auth/LoginSysUserVo.java
  65. 19
    0
      src/main/java/com/xdf/creative/support/exception/BusinessException.java
  66. 21
    0
      src/main/java/com/xdf/creative/support/exception/DaoException.java
  67. 29
    0
      src/main/java/com/xdf/creative/support/exception/SpringBootPlusException.java
  68. 24
    0
      src/main/java/com/xdf/creative/support/exception/SysLoginException.java
  69. 21
    0
      src/main/java/com/xdf/creative/util/HttpServletRequestUtil.java
  70. 33
    0
      src/main/java/com/xdf/creative/util/PasswordUtil.java
  71. 17
    0
      src/main/java/com/xdf/creative/util/UUIDUtil.java
  72. 28
    0
      src/main/java/com/xdf/creative/util/convert/SysPermissionConvert.java
  73. 27
    0
      src/main/java/com/xdf/creative/util/convert/SysRoleConvert.java
  74. 33
    0
      src/main/java/com/xdf/creative/util/convert/SysUserConvert.java
  75. 102
    0
      src/main/java/com/xdf/creative/util/tree/TreeConfig.java
  76. 227
    0
      src/main/java/com/xdf/creative/util/tree/Utils.java
  77. 23
    1
      src/main/resources/application.yml
  78. 91
    0
      src/main/resources/mapper/SysOrganizeMapper.xml
  79. 115
    0
      src/main/resources/mapper/SysPermissionMapper.xml
  80. 32
    0
      src/main/resources/mapper/SysRoleMapper.xml
  81. 37
    0
      src/main/resources/mapper/SysRolePermissionMapper.xml
  82. 32
    0
      src/main/resources/mapper/SysUserMapper.xml
  83. 46
    0
      src/main/resources/mapper/SysUserRoleMapper.xml

+ 10
- 1
pom.xml View File

@@ -173,10 +173,19 @@
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>


<!-- 分页支持pageHelper -->

<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.6.10</version>
</dependency>

</dependencies>


+ 46
- 0
src/main/java/com/xdf/creative/base/params/creative/AddSysRoleParam.java View File

@@ -0,0 +1,46 @@

package com.xdf.creative.base.params.creative;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
import java.util.List;

/**
* 添加角色
*
* @author DeanYe
* @date 2019-10-25
**/
@Data
@Accessors(chain = true)
@ApiModel(value = "添加角色", description = "添加系统角色参数对象")
public class AddSysRoleParam {

@ApiModelProperty(value = "角色名称")
@NotBlank(message = "角色名称不能为空")
private String name;

@ApiModelProperty(value = "角色唯一编码")
private String code;

@ApiModelProperty(value = "角色类型")
private Integer type;

@ApiModelProperty(value = "角色状态,0:禁用,1:启用")
private Integer state;

@ApiModelProperty(value = "备注")
private String remark;

@ApiModelProperty(value = "权限id列表")
@NotEmpty(message = "权限集合不能为空")
@Size(max = 1000, message = "权限集合超过上限")
private List<String> permissionIds;

}

+ 18
- 0
src/main/java/com/xdf/creative/base/params/creative/IsEnableSysOrganizeParam.java View File

@@ -0,0 +1,18 @@
package com.xdf.creative.base.params.creative;

import lombok.Data;

@Data
public class IsEnableSysOrganizeParam {
//用户Id
private Long userId;
//组织Id
private Long orgId;

public IsEnableSysOrganizeParam() {
}
public IsEnableSysOrganizeParam(Long userId, Long orgId) {
this.userId = userId;
this.orgId = orgId;
}
}

+ 60
- 0
src/main/java/com/xdf/creative/base/params/creative/SysOrganizeQueryParam.java View File

@@ -0,0 +1,60 @@
package com.xdf.creative.base.params.creative;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.xdf.creative.base.params.QueryParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotNull;
import java.util.Date;

/**
* <p>
* 组织信息 查询参数对象
* </p>
*
* @author DeanYe
* @date 2019-11-05
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysOrganizeQueryParam对象", description = "组织信息查询参数")
public class SysOrganizeQueryParam extends QueryParam {
private static final long serialVersionUID = 1L;


@TableId(value = "id", type = IdType.AUTO)
@NotNull(message = "不能为空")
private Long id;

@ApiModelProperty(value = "组织名称")
private String organizeName;

@ApiModelProperty(value = "管辖区域")
private Long popedom_id;

@ApiModelProperty(value = "类型: 0 普通用户 1、园区用户 2 区文创办 3市文创办 8后台管理 ")
private Integer organizeType;

@ApiModelProperty(value = "是否为系统组织: 0 否 1是")
private Integer systemCreate;

@ApiModelProperty(value = "系统状态 0停用 1启用")
private Integer state;

@ApiModelProperty(value = "修该时间")
private Date updateTime;

@ApiModelProperty(value = "创建时间")
private Date createTime;

@ApiModelProperty(value = "父id")
private Long parentId;


}

+ 79
- 0
src/main/java/com/xdf/creative/base/params/creative/SysPermissionQueryParam.java View File

@@ -0,0 +1,79 @@
package com.xdf.creative.base.params.creative;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.xdf.creative.base.params.QueryParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.util.Date;

/**
* <p>
* 系统权限 查询参数对象
* </p>
*
* @author DeanYe
* @date 2019-11-07
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysPermissionQueryParam对象", description = "系统权限查询参数")
public class SysPermissionQueryParam extends QueryParam {
private static final long serialVersionUID = 1L;


@ApiModelProperty(value = "主键")
@TableId(value = "id", type = IdType.ID_WORKER)
private Long id;

@ApiModelProperty(value = "权限名称")
private String name;

private String resourceId;

@ApiModelProperty(value = "父id")
private String parentResourceId;

@ApiModelProperty(value = "路径")
private String url;

@ApiModelProperty(value = "唯一编码")
private String code;

@ApiModelProperty(value = "图标")
private String icon;

@ApiModelProperty(value = "类型,0 目录 1:菜单,2:按钮 3 url")
private Integer type;

@ApiModelProperty(value = "层级,1:第一级,2:第二级,N:第N级")
private Integer level;

@ApiModelProperty(value = "状态,0:禁用,1:启用")
private Integer state;

@ApiModelProperty(value = "排序")
private Integer sort;

@ApiModelProperty(value = "备注")
private String remark;

@ApiModelProperty(value = "逻辑删除,0:未删除,1:已删除")
private Integer deleted;

@ApiModelProperty(value = "版本")
private Integer version;

@ApiModelProperty(value = "创建时间")
private Date createTime;

@ApiModelProperty(value = "修改时间")
private Date updateTime;


}

+ 24
- 0
src/main/java/com/xdf/creative/base/params/creative/SysRolePermissionQueryParam.java View File

@@ -0,0 +1,24 @@

package com.xdf.creative.base.params.creative;

import com.xdf.creative.base.params.QueryParam;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
* <pre>
* 角色权限关系 查询参数对象
* </pre>
*
* @author DeanYe
* @date 2019-10-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysRolePermissionQueryParam对象", description = "角色权限关系查询参数")
public class SysRolePermissionQueryParam extends QueryParam {
private static final long serialVersionUID = 1L;
}

+ 24
- 0
src/main/java/com/xdf/creative/base/params/creative/SysRoleQueryParam.java View File

@@ -0,0 +1,24 @@

package com.xdf.creative.base.params.creative;

import com.xdf.creative.base.params.QueryParam;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
* <pre>
* 系统角色 查询参数对象
* </pre>
*
* @author DeanYe
* @date 2019-10-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysRoleQueryParam对象", description = "系统角色查询参数")
public class SysRoleQueryParam extends QueryParam {
private static final long serialVersionUID = 1L;
}

+ 24
- 0
src/main/java/com/xdf/creative/base/params/creative/SysUserQueryParam.java View File

@@ -0,0 +1,24 @@

package com.xdf.creative.base.params.creative;

import com.xdf.creative.base.params.QueryParam;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
* <pre>
* 系统用户 查询参数对象
* </pre>
*
* @author DeanYe
* @date 2019-10-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysUserQueryParam对象", description = "系统用户查询参数")
public class SysUserQueryParam extends QueryParam {
private static final long serialVersionUID = 1L;
}

+ 45
- 0
src/main/java/com/xdf/creative/base/params/creative/SysUserRoleQueryParam.java View File

@@ -0,0 +1,45 @@
package com.xdf.creative.base.params.creative;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.xdf.creative.base.params.QueryParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotNull;
import java.util.Date;

/**
* <p>
* 系统用户角色表 查询参数对象
* </p>
*
* @author DeanYe
* @date 2019-10-30
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysUserRoleQueryParam对象", description = "系统用户角色表查询参数")
public class SysUserRoleQueryParam extends QueryParam {
private static final long serialVersionUID = 1L;


@TableId(value = "id", type = IdType.AUTO)
@NotNull(message = "不能为空")
private Long id;

@ApiModelProperty(value = "用户ID")
private Long userId;

@ApiModelProperty(value = "角色ID")
private Long roleId;

@ApiModelProperty(value = "创建时间")
private Date createTime;


}

+ 37
- 0
src/main/java/com/xdf/creative/base/params/creative/UpdatePasswordParam.java View File

@@ -0,0 +1,37 @@

package com.xdf.creative.base.params.creative;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

/**
* 修改密码参数
*
* @author DeanYe
* @date 2019-10-27
**/
@Data
@Accessors(chain = true)
public class UpdatePasswordParam {

@ApiModelProperty("用户id")
@NotNull(message = "用户id不能为空")
private Long userId;

@ApiModelProperty("原密码")
@NotEmpty(message = "原密码不能为空")
private String oldPassword;

@ApiModelProperty("新密码")
@NotEmpty(message = "新密码不能为空")
private String newPassword;

@ApiModelProperty("新密码")
@NotEmpty(message = "确认密码不能为空")
private String confirmPassword;

}

+ 48
- 0
src/main/java/com/xdf/creative/base/params/creative/UpdateSysRoleParam.java View File

@@ -0,0 +1,48 @@

package com.xdf.creative.base.params.creative;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;

/**
* 添加角色
*
* @author DeanYe
* @date 2019-10-25
**/
@Data
@Accessors(chain = true)
@ApiModel(value = "添加角色", description = "添加系统角色参数对象")
public class UpdateSysRoleParam {

@ApiModelProperty(value = "主键")
@NotNull(message = "主键不能为空")
private Long id;

@ApiModelProperty(value = "角色名称")
@NotBlank(message = "角色名称不能为空")
private String name;

@ApiModelProperty(value = "角色类型")
private Integer type;

@ApiModelProperty(value = "角色状态,0:禁用,1:启用")
private Integer state;

@ApiModelProperty(value = "备注")
private String remark;

@ApiModelProperty(value = "权限id列表")
@NotEmpty(message = "权限集合不能为空")
@Size(max = 1000, message = "权限集合超过上限")
private List<String> permissionIds;

}

+ 55
- 0
src/main/java/com/xdf/creative/base/params/creative/UpdateUserParam.java View File

@@ -0,0 +1,55 @@
package com.xdf.creative.base.params.creative;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotNull;
import java.util.Set;

@Data
@Accessors(chain = true)
@ApiModel(value = "SaveSysUserParam对象", description = "添加系统用户对象")
public class UpdateUserParam {

@ApiModelProperty(value = "主键")
@TableId(value = "id", type = IdType.ID_WORKER)
@NotNull(message = "用户id不能为空")
private Long id;

@ApiModelProperty(value = "昵称")
private String nickname;

@ApiModelProperty(value = "密码")
private String password;

@ApiModelProperty(value = "手机号码")
private String phone;

@ApiModelProperty(value = "邮箱")
private String email;

@ApiModelProperty(value = "状态,0:禁用,1:启用,2:锁定")
private Integer state;

@ApiModelProperty(value = "角色id")
private Set<Long> roleId;

@ApiModelProperty(value = "性别,0:女,1:男,默认1")
private Integer gender;

@ApiModelProperty(value = "头像")
private String head;

@ApiModelProperty(value = "逻辑删除,0:未删除,1:已删除")
private Integer deleted;

@ApiModelProperty(value = "备注")
private String remark;

@ApiModelProperty(value = "组织id")
private Long organizeId;
}

+ 58
- 0
src/main/java/com/xdf/creative/base/vo/creative/SysOrganizeQueryVo.java View File

@@ -0,0 +1,58 @@
package com.xdf.creative.base.vo.creative;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.Date;

/**
* <p>
* 组织信息 查询结果对象
* </p>
*
* @author DeanYe
* @date 2019-11-05
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "SysOrganizeQueryVo对象", description = "组织信息查询参数")
public class SysOrganizeQueryVo implements Serializable {
private static final long serialVersionUID = 1L;

private Long id;

@ApiModelProperty(value = "组织名称")
private String organizeName;

@ApiModelProperty(value = "管辖区域")
private Long popedomId;

@ApiModelProperty(value = "类型: 0 普通用户 1、园区用户 2 区文创办 3市文创办 8后台管理 ")
private Integer organizeType;

@ApiModelProperty(value = "是否为系统组织: 0 否 1是")
private Integer systemCreate;

@ApiModelProperty(value = "系统状态 0停用 1启用")
private Integer state;

@ApiModelProperty(value = "修该时间")
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;

@ApiModelProperty(value = "创建时间")
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;

@ApiModelProperty(value = "父id")
private Long parentId;


}

+ 72
- 0
src/main/java/com/xdf/creative/base/vo/creative/SysPermissionQueryVo.java View File

@@ -0,0 +1,72 @@
package com.xdf.creative.base.vo.creative;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.Date;

/**
* <p>
* 系统权限 查询结果对象
* </p>
*
* @author DeanYe
* @date 2019-11-07
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "SysPermissionQueryVo对象", description = "系统权限查询参数")
public class SysPermissionQueryVo implements Serializable {
private static final long serialVersionUID = 1L;

@ApiModelProperty(value = "主键")
private Long id;

@ApiModelProperty(value = "权限名称")
private String name;

private String resourceId;

@ApiModelProperty(value = "父id")
private String parentResourceId;

@ApiModelProperty(value = "路径")
private String url;

@ApiModelProperty(value = "唯一编码")
private String code;

@ApiModelProperty(value = "图标")
private String icon;

@ApiModelProperty(value = "类型,0 目录 1:菜单,2:按钮 3 url")
private Integer type;

@ApiModelProperty(value = "层级,1:第一级,2:第二级,N:第N级")
private Integer level;

@ApiModelProperty(value = "状态,0:禁用,1:启用")
private Integer state;

@ApiModelProperty(value = "排序")
private Integer sort;

@ApiModelProperty(value = "备注")
private String remark;

@ApiModelProperty(value = "逻辑删除,0:未删除,1:已删除")
private Integer deleted;

@ApiModelProperty(value = "版本")
private Integer version;

@ApiModelProperty(value = "创建时间")
private Date createTime;

@ApiModelProperty(value = "修改时间")
private Date updateTime;

}

+ 89
- 0
src/main/java/com/xdf/creative/base/vo/creative/SysPermissionTreeVo.java View File

@@ -0,0 +1,89 @@
/*
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.xdf.creative.base.vo.creative;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
* 系统权限树形列表VO
*
* @author DeanYe
* @date 2019-10-26
**/
@Data
@Accessors(chain = true)
@ApiModel(value = "SysPermissionTreeVo对象", description = "系统权限树形列表")
public class SysPermissionTreeVo implements Serializable {
private static final long serialVersionUID = 2738804574228359190L;

@ApiModelProperty(value = "主键")
private Long id;

@ApiModelProperty(value = "权限名称")
private String name;

private String resourceId;

@ApiModelProperty(value = "父id")
private String parentResourceId;


@ApiModelProperty(value = "路径")
private String url;

@ApiModelProperty(value = "唯一编码")
private String code;

@ApiModelProperty(value = "图标")
private String icon;

@ApiModelProperty(value = "类型,1:菜单,2:按钮")
private Integer type;

@ApiModelProperty(value = "层级,1:第一级,2:第二级,N:第N级")
private Integer level;

@ApiModelProperty(value = "状态,0:禁用,1:启用")
private Integer state;

@ApiModelProperty(value = "排序")
private Integer sort;

@ApiModelProperty(value = "备注")
private String remark;

@ApiModelProperty(value = "版本")
private Integer version;

@ApiModelProperty(value = "创建时间")
private Date createTime;

@ApiModelProperty(value = "修改时间")
private Date updateTime;

@ApiModelProperty(value = "子节点集合")
private List<SysPermissionTreeVo> children = new ArrayList<>();

}

+ 65
- 0
src/main/java/com/xdf/creative/base/vo/creative/SysRolePermissionQueryVo.java View File

@@ -0,0 +1,65 @@
/*
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.xdf.creative.base.vo.creative;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.Date;

/**
* <pre>
* 角色权限关系 查询结果对象
* </pre>
*
* @author DeanYe
* @date 2019-10-24
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "SysRolePermissionQueryVo对象", description = "角色权限关系查询参数")
public class SysRolePermissionQueryVo implements Serializable {
private static final long serialVersionUID = 1L;

@ApiModelProperty(value = "主键")
private Long id;

@ApiModelProperty(value = "角色id")
private Long roleId;

@ApiModelProperty(value = "权限id")
private Long permissionId;

@ApiModelProperty(value = "状态,0:禁用,1:启用")
private Integer state;

@ApiModelProperty(value = "备注")
private String remark;

@ApiModelProperty(value = "版本")
private Integer version;

@ApiModelProperty(value = "创建时间")
private Date createTime;

@ApiModelProperty(value = "修改时间")
private Date updateTime;

}

+ 68
- 0
src/main/java/com/xdf/creative/base/vo/creative/SysRoleQueryVo.java View File

@@ -0,0 +1,68 @@
/*
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.xdf.creative.base.vo.creative;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.Date;

/**
* <pre>
* 系统角色 查询结果对象
* </pre>
*
* @author DeanYe
* @date 2019-10-24
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "SysRoleQueryVo对象", description = "系统角色查询参数")
public class SysRoleQueryVo implements Serializable {
private static final long serialVersionUID = 1L;

@ApiModelProperty(value = "主键")
private Long id;

@ApiModelProperty(value = "角色名称")
private String name;

@ApiModelProperty(value = "角色唯一编码")
private String code;

@ApiModelProperty(value = "角色类型")
private Integer type;

@ApiModelProperty(value = "角色状态,0:禁用,1:启用")
private Integer state;

@ApiModelProperty(value = "备注")
private String remark;

@ApiModelProperty(value = "版本")
private Integer version;

@ApiModelProperty(value = "创建时间")
private Date createTime;

@ApiModelProperty(value = "修改时间")
private Date updateTime;

}

+ 102
- 0
src/main/java/com/xdf/creative/base/vo/creative/SysUserQueryVo.java View File

@@ -0,0 +1,102 @@
/*
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.xdf.creative.base.vo.creative;

import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.Date;
import java.util.Set;

/**
* <pre>
* 系统用户 查询结果对象
* </pre>
*
* @author DeanYe
* @date 2019-10-24
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "SysUserQueryVo对象", description = "系统用户查询参数")
public class SysUserQueryVo implements Serializable {
private static final long serialVersionUID = 1L;

@ApiModelProperty(value = "主键")
private Long id;

@ApiModelProperty(value = "用户名")
private String username;

@ApiModelProperty(value = "昵称")
private String nickname;

@ApiModelProperty(value = "密码")
private String password;

@ApiModelProperty(value = "盐值")
private String salt;

@ApiModelProperty(value = "手机号码")
private String phone;

@ApiModelProperty(value = "邮箱")
private String email;

@ApiModelProperty(value = "状态,0:禁用,1:启用,2:锁定")
private Integer state;

@ApiModelProperty(value = "角色id")
@TableField(exist = false)
private Set<Long> roleId;

@ApiModelProperty(value = "性别,0:女,1:男,默认1")
private Integer gender;

@ApiModelProperty(value = "头像")
private String head;

@ApiModelProperty(value = "0 普通用户 1、园区 2 区文创办 3 市文创办 8后台管理")
private Integer userType;

@ApiModelProperty(value = "组织id")
private Long organizeId;

@ApiModelProperty(value = "创建者id")
private Long createUserId;

@ApiModelProperty(value = "逻辑删除,0:未删除,1:已删除")
private Integer deleted;

@ApiModelProperty(value = "版本")
private Integer version;

@ApiModelProperty(value = "remark")
private String remark;

@ApiModelProperty(value = "创建时间")
private Date createTime;

@ApiModelProperty(value = "修改时间")
private Date updateTime;


}

+ 36
- 0
src/main/java/com/xdf/creative/base/vo/creative/SysUserRoleQueryVo.java View File

@@ -0,0 +1,36 @@
package com.xdf.creative.base.vo.creative;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.Date;

/**
* <p>
* 系统用户角色表 查询结果对象
* </p>
*
* @author DeanYe
* @date 2019-10-30
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "SysUserRoleQueryVo对象", description = "系统用户角色表查询参数")
public class SysUserRoleQueryVo implements Serializable {
private static final long serialVersionUID = 1L;

private Long id;

@ApiModelProperty(value = "用户ID")
private Long userId;

@ApiModelProperty(value = "角色ID")
private Long roleId;

@ApiModelProperty(value = "创建时间")
private Date createTime;

}

+ 15
- 0
src/main/java/com/xdf/creative/enums/BaseTypeStateEnum.java View File

@@ -0,0 +1,15 @@

package com.xdf.creative.enums;

/**
* @author DeanYe
* @date 2018-11-08
*/
public interface BaseTypeStateEnum {

Integer getKey();

String getValue();


}

+ 30
- 0
src/main/java/com/xdf/creative/enums/LevelEnum.java View File

@@ -0,0 +1,30 @@

package com.xdf.creative.enums;

/**
* @author DeanYe
* @date 2019-10-24
**/
public enum LevelEnum implements BaseTypeStateEnum {
ONE(1, "一级菜单"),
TWO(2, "二级菜单"),
THREE(3, "功能菜单");

private Integer key;
private String value;

LevelEnum(Integer key, String value) {
this.key = key;
this.value = value;
}

@Override
public Integer getKey() {
return this.key;
}

@Override
public String getValue() {
return this.value;
}
}

+ 22
- 0
src/main/java/com/xdf/creative/enums/StateEnum.java View File

@@ -0,0 +1,22 @@

package com.xdf.creative.enums;



/**
* @author DeanYe
* @date 2019-10-24
**/
public enum StateEnum implements BaseTypeStateEnum {
DISABLE, ENABLE;

@Override
public Integer getKey() {
return this.ordinal();
}

@Override
public String getValue() {
return this.name();
}
}

+ 91
- 0
src/main/java/com/xdf/creative/module/controller/SysOrganizeController.java View File

@@ -0,0 +1,91 @@
package com.xdf.creative.module.controller;

import com.xdf.creative.base.controller.BaseController;
import com.xdf.creative.base.params.IdParam;
import com.xdf.creative.base.params.creative.SysOrganizeQueryParam;
import com.xdf.creative.base.vo.creative.SysOrganizeQueryVo;
import com.xdf.creative.module.entity.SysOrganize;
import com.xdf.creative.module.service.SysOrganizeService;
import com.xdf.creative.util.page.ApiResult;
import com.xdf.creative.util.page.PageTool;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

/**
* <p>
* 组织信息 前端控制器
* </p>
*
* @author DeanYe
* @since 2019-11-05
*/
@Slf4j
@RestController
@RequestMapping("/sysOrganize")
@Api("组织信息 API")
public class SysOrganizeController extends BaseController {

@Autowired
private SysOrganizeService sysOrganizeService;


/**
* 添加组织信息
*/
@PostMapping("/add")
@ApiOperation(value = "添加SysOrganize对象", notes = "添加组织信息", response = ApiResult.class)
public ApiResult<Boolean> addSysOrganize(@Valid @RequestBody SysOrganize sysOrganize) throws Exception {
boolean flag = sysOrganizeService.save(sysOrganize);
return ApiResult.result(flag);
}

/**
* 修改组织信息
*/
@PostMapping("/update")
@ApiOperation(value = "修改SysOrganize对象", notes = "修改组织信息", response = ApiResult.class)
public ApiResult<Boolean> updateSysOrganize(@Valid @RequestBody SysOrganize sysOrganize) throws Exception {
boolean flag = sysOrganizeService.updateById(sysOrganize);
return ApiResult.result(flag);
}

/**
* 删除组织信息
*/
@PostMapping("/delete")
@ApiOperation(value = "删除SysOrganize对象", notes = "删除组织信息", response = ApiResult.class)
public ApiResult<Boolean> deleteSysOrganize(@Valid @RequestBody IdParam idParam) throws Exception {
boolean flag = sysOrganizeService.removeById(idParam.getId());
return ApiResult.result(flag);
}

/**
* 获取组织信息
*/
@PostMapping("/getSysOrganize")
@ApiOperation(value = "获取SysOrganize对象详情", notes = "查看组织信息", response = SysOrganizeQueryVo.class)
public ApiResult<SysOrganizeQueryVo> getSysOrganize(@Valid @RequestBody IdParam idParam) throws Exception {
SysOrganizeQueryVo sysOrganizeQueryVo = sysOrganizeService.getSysOrganizeById(idParam.getId());
return ApiResult.ok(sysOrganizeQueryVo);
}

/**
* 组织信息分页列表
*/
@PostMapping("/getPageList")
@ApiOperation(value = "获取SysOrganize分页列表", notes = "组织信息分页列表", response = SysOrganizeQueryVo.class)
public ApiResult<PageTool<SysOrganizeQueryVo>> getSysOrganizePageList(@Valid @RequestBody SysOrganizeQueryParam sysOrganizeQueryParam) throws Exception {
PageTool<SysOrganizeQueryVo> pageList = sysOrganizeService.getSysOrganizePageList(sysOrganizeQueryParam);
return ApiResult.ok(pageList);
}

}


+ 170
- 0
src/main/java/com/xdf/creative/module/controller/SysPermissionController.java View File

@@ -0,0 +1,170 @@

package com.xdf.creative.module.controller;

import com.xdf.creative.base.controller.BaseController;
import com.xdf.creative.base.params.creative.SysPermissionQueryParam;
import com.xdf.creative.base.vo.creative.SysPermissionQueryVo;
import com.xdf.creative.module.entity.SysPermission;
import com.xdf.creative.module.service.SysPermissionService;
import com.xdf.creative.util.page.ApiResult;
import com.xdf.creative.util.page.PageTool;
import com.xdf.creative.util.tree.TreeConfig;
import com.xdf.creative.util.tree.Utils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;
import java.util.Set;

/**
* <pre>
* 系统权限 前端控制器
* </pre>
*
* @author DeanYe
* @since 2019-10-24
*/
@Slf4j
@RestController
@RequestMapping("/sysPermission")
@Api("系统权限 API")
public class SysPermissionController extends BaseController {

@Autowired
private SysPermissionService sysPermissionService;


/**
* 添加系统权限
*/
@PostMapping("/add")
@ApiOperation(value = "添加SysPermission对象", notes = "添加系统权限", response = ApiResult.class)
public ApiResult<Boolean> addSysPermission(@Valid @RequestBody SysPermission sysPermission) throws Exception {
boolean flag = sysPermissionService.saveSysPermission(sysPermission);
return ApiResult.result(flag);
}

/**
* 修改系统权限
*/
@PostMapping("/update")
@ApiOperation(value = "修改SysPermission对象", notes = "修改系统权限", response = ApiResult.class)
public ApiResult<Boolean> updateSysPermission(@Valid @RequestBody SysPermission sysPermission) throws Exception {
boolean flag = sysPermissionService.updateSysPermission(sysPermission);
return ApiResult.result(flag);
}

/**
* 删除系统权限
*/
@PostMapping("/deleteSysPermissionById")
@ApiOperation(value = "删除SysPermission对象", notes = "删除系统权限", response = ApiResult.class)
public ApiResult<Boolean> deleteSysPermission(String resourceId) throws Exception {
boolean flag = sysPermissionService.deleteSysPermission(resourceId);
return ApiResult.result(flag);
}

/**
* 获取系统权限
*/
@GetMapping("/getSysPermissionById")
@ApiOperation(value = "获取SysPermission对象详情", notes = "查看系统权限", response = SysPermissionQueryVo.class)
public ApiResult<SysPermissionQueryVo> getSysPermission(Long id) throws Exception {
SysPermissionQueryVo sysPermissionQueryVo = sysPermissionService.getSysPermissionById(id);
return ApiResult.ok(sysPermissionQueryVo);
}

/**
* 系统权限分页列表
*/
@PostMapping("/getPageList")
@ApiOperation(value = "获取SysPermission分页列表", notes = "系统权限分页列表", response = SysPermissionQueryVo.class)
public ApiResult<PageTool<SysPermissionQueryVo>> getSysPermissionPageList(@Valid @RequestBody SysPermissionQueryParam sysPermissionQueryParam) throws Exception {
PageTool<SysPermissionQueryVo> paging = sysPermissionService.getSysPermissionPageList(sysPermissionQueryParam);
return ApiResult.ok(paging);
}

/**
* 获取所有菜单列表
*/
@PostMapping("/getAllMenuList")
@ApiOperation(value = "获取所有菜单列表", notes = "获取所有菜单列表", response = SysPermission.class)
public ApiResult<SysPermission> getAllMenuList() throws Exception {
List<SysPermission> list = sysPermissionService.getAllMenuList();
return ApiResult.ok(list);
}


/**
* 根据用户id获取菜单列表
*/
@GetMapping("/getMenuListByUserId")
@ApiOperation(value = "根据用户id获取菜单列表", notes = "根据用户id获取菜单列表", response = SysPermission.class)
public ApiResult<SysPermission> getMenuListByUserId(Long userId) throws Exception {
List<SysPermission> list = sysPermissionService.getMenuListByUserId(userId);
return ApiResult.ok(list);
}


/**
* 根据请userId获取该用户权限路径集合
*/
@RequestMapping(value = "/getPermissionUrlByUserId", method = {RequestMethod.POST, RequestMethod.GET})
@ApiOperation(value = "根据请求路径获取该用户权限编码", notes = "根据请求路径获取该用户权限编码", response = ApiResult.class)
public ApiResult<Set<String>> getPermissionUrlByUserId(Long userId) throws Exception {
Set<String> permissionUrls = sysPermissionService.getPermissionUrlByUserId(userId);
return ApiResult.ok(permissionUrls);
}


/**
* 角色授权资源树
*/
@PostMapping("/impowerResourceTreeList")
@ApiOperation(value = "获取所有菜单列表", notes = "获取所有菜单列表", response = SysPermission.class)
public ApiResult<SysPermission> impowerResourceTreeList(Long userId) throws Exception {
List<Object> list = sysPermissionService.impowerResourceTreeList(userId);
TreeConfig config = new TreeConfig("resourceId", "parentResourceId", "parentResourceId", "1", "");
return ApiResult.ok(Utils.tree(list, config));
}


@RequestMapping(value = "/setPermissionToRoleByUserId", method = {RequestMethod.GET})
@ApiOperation(value = "给用户角色授权", notes = "给用户角色授权", response = SysPermission.class)
public ApiResult<Boolean> setPermissionToRoleByUserId(Long userId, Long roleId) throws Exception {
boolean isSucceed = sysPermissionService.setPermissionToRoleByUserId(userId, roleId);
return ApiResult.result(isSucceed);
}


@RequestMapping(value = "/getTreeMenusByUserId", method = {RequestMethod.GET})
@ApiOperation(value = "根据用户ID获取树形菜单", notes = "根据用户ID获取树形菜单", response = SysPermission.class)
public ApiResult<List<Object>> getTreeMenusByUserId(Long userId) throws Exception {
List<Object> treeMenusByUserId = sysPermissionService.getTreeMenusByUserId(userId);
return ApiResult.ok(treeMenusByUserId);
}


@RequestMapping(value = "/getSkipAuthUrls", method = {RequestMethod.GET})
@ApiOperation(value = "获取无需鉴权URL", notes = "获取无需鉴权URL", response = SysPermission.class)
public ApiResult<List<String>> getSkipAuthUrls() throws Exception {
List<String> skipAuthUrls = sysPermissionService.getSkipAuthUrls();
return ApiResult.ok(skipAuthUrls);
}


@RequestMapping(value = "/refreshSkipAuthUrls", method = {RequestMethod.POST})
@ApiOperation(value = "刷新SkipAuthUrls", notes = "刷新SkipAuthUrls", response = SysPermission.class)
public ApiResult refreshSkipAuthUrls() throws Exception {
List<String> skipAuthUrls = sysPermissionService.getSkipAuthUrls();
// redisTemplate.convertAndSend("skipAuthUrls", skipAuthUrls);//发送对列消息
return ApiResult.ok();
}


}


+ 99
- 0
src/main/java/com/xdf/creative/module/controller/SysRoleController.java View File

@@ -0,0 +1,99 @@

package com.xdf.creative.module.controller;

import com.xdf.creative.base.controller.BaseController;
import com.xdf.creative.base.params.creative.AddSysRoleParam;
import com.xdf.creative.base.params.creative.SysRoleQueryParam;
import com.xdf.creative.base.params.creative.UpdateSysRoleParam;
import com.xdf.creative.base.vo.creative.SysRoleQueryVo;
import com.xdf.creative.module.service.SysRoleService;
import com.xdf.creative.util.page.ApiResult;
import com.xdf.creative.util.page.PageTool;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

/**
* <pre>
* 系统角色 前端控制器
* </pre>
*
* @author DeanYe
* @since 2019-10-24
*/
@Slf4j
@RestController
@RequestMapping("/sysRole")
@Api("系统角色 API")
public class SysRoleController extends BaseController {

@Autowired
private SysRoleService sysRoleService;

/**
* 添加系统角色
*/
@PostMapping("/add")
@ApiOperation(value = "添加SysRole对象", notes = "添加系统角色", response = ApiResult.class)
public ApiResult<Boolean> addSysRole(@Valid @RequestBody AddSysRoleParam addSysRoleParam) throws Exception {
boolean flag = sysRoleService.saveSysRole(addSysRoleParam);
return ApiResult.result(flag);
}

/**
* 修改系统角色
*/
@PostMapping("/update")
@ApiOperation(value = "修改SysRole对象", notes = "修改系统角色", response = ApiResult.class)
public ApiResult<Boolean> updateSysRole(@Valid @RequestBody UpdateSysRoleParam updateSysRoleParam) throws Exception {
boolean flag = sysRoleService.updateSysRole(updateSysRoleParam);
return ApiResult.result(flag);
}

/**
* 删除系统角色
*/
@PostMapping("/delete/{id}")
@ApiOperation(value = "删除SysRole对象", notes = "删除系统角色", response = ApiResult.class)
public ApiResult<Boolean> deleteSysRole(@PathVariable("id") Long id) throws Exception {
boolean flag = sysRoleService.deleteSysRole(id);
return ApiResult.result(flag);
}

/**
* 获取系统角色
*/
@GetMapping("/getSysRoleInfo")
@ApiOperation(value = "获取SysRole对象详情", notes = "查看系统角色", response = SysRoleQueryVo.class)
public ApiResult<SysRoleQueryVo> getSysRole(Long id) throws Exception {
SysRoleQueryVo sysRoleQueryVo = sysRoleService.getSysRoleById(id);
return ApiResult.ok(sysRoleQueryVo);
}

/**
* 系统角色分页列表
*/
@PostMapping("/getPageList")
@ApiOperation(value = "获取SysRole分页列表", notes = "系统角色分页列表", response = SysRoleQueryVo.class)
public ApiResult<PageTool<SysRoleQueryVo>> getSysRolePageList(@Valid @RequestBody SysRoleQueryParam sysRoleQueryParam) throws Exception {
PageTool<SysRoleQueryVo> pageList = sysRoleService.getSysRolePageList(sysRoleQueryParam);
return ApiResult.ok(pageList);
}

/**
* 根据UserId系统角色列表
*/
@RequestMapping(value = "/getUserRoleByUserId", method = {RequestMethod.GET, RequestMethod.POST})
@ApiOperation(value = "获取SysRole列表", notes = "系统角色列表", response = SysRoleQueryVo.class)
public ApiResult<List<SysRoleQueryVo>> getUserRoleByUserId(@RequestParam Long userId) {
List<SysRoleQueryVo> vos = sysRoleService.getUserRoleByUserId(userId);
return ApiResult.ok(vos);
}

}


+ 122
- 0
src/main/java/com/xdf/creative/module/controller/SysUserController.java View File

@@ -0,0 +1,122 @@

package com.xdf.creative.module.controller;

import com.xdf.creative.base.controller.BaseController;
import com.xdf.creative.base.params.creative.SysUserQueryParam;
import com.xdf.creative.base.params.creative.UpdatePasswordParam;
import com.xdf.creative.base.params.creative.UpdateUserParam;
import com.xdf.creative.base.vo.creative.SysUserQueryVo;
import com.xdf.creative.module.entity.SysUser;
import com.xdf.creative.module.service.SysUserService;
import com.xdf.creative.support.auth.LoginParam;
import com.xdf.creative.support.auth.LoginSysUserTokenVo;
import com.xdf.creative.util.page.ApiResult;
import com.xdf.creative.util.page.PageTool;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;

/**
* <pre>
* 系统用户 前端控制器
* </pre>
*
* @author DeanYe
* @since 2019-10-24
*/
@Slf4j
@RestController
@RequestMapping("/sysUser")
@Api("系统用户 API")
public class SysUserController extends BaseController {

@Autowired
private SysUserService sysUserService;


@PostMapping("/login")
@ApiOperation(value = "登陆", notes = "系统用户登陆", response = ApiResult.class)
public ApiResult login(@Valid @RequestBody LoginParam loginParam, HttpServletResponse response) throws Exception {
LoginSysUserTokenVo loginSysUserTokenVo = sysUserService.login(loginParam);
// 设置token响应头
// response.setHeader(JwtTokenUtil.getTokenName(), loginSysUserTokenVo.getToken());
return ApiResult.ok(loginSysUserTokenVo, "登陆成功");
}


/**
* 添加系统用户
*/
@PostMapping("/add")
@ApiOperation(value = "添加SysUser对象", notes = "添加系统用户", response = ApiResult.class)
public ApiResult<Boolean> addSysUser(@Valid @RequestBody SysUser sysUser) throws Exception {
boolean flag = sysUserService.saveSysUser(sysUser);
return ApiResult.result(flag);
}

/**
* 修改系统用户
*/
@PostMapping("/update")
@ApiOperation(value = "修改SysUser对象", notes = "修改系统用户", response = ApiResult.class)
public ApiResult<Boolean> updateSysUser(@Valid @RequestBody UpdateUserParam updateUserParam) throws Exception {
boolean flag = sysUserService.updateSysUser(updateUserParam);
return ApiResult.result(flag);
}

/**
* 删除系统用户
*/
@RequestMapping(value = "/delete", method = {RequestMethod.GET, RequestMethod.POST})
@ApiOperation(value = "删除SysUser对象", notes = "删除系统用户", response = ApiResult.class)
public ApiResult<Boolean> deleteSysUser(Long id) throws Exception {
boolean flag = sysUserService.deleteSysUser(id);
return ApiResult.result(flag);
}

/**
* 获取系统用户
*/
@GetMapping("/getSysUserById")
@ApiOperation(value = "获取SysUser对象详情", notes = "查看系统用户", response = SysUserQueryVo.class)
public ApiResult<SysUserQueryVo> getSysUser(Long id) throws Exception {
SysUserQueryVo sysUserQueryVo = sysUserService.getSysUserById(id);
return ApiResult.ok(sysUserQueryVo);
}

/**
* 获取系统用户
*/
@GetMapping("/getSysUserByUserName")
@ApiOperation(value = "获取SysUser对象详情", notes = "查看系统用户", response = SysUserQueryVo.class)
public ApiResult<SysUser> getSysUserByUserName(@RequestParam String username) throws Exception {
SysUser sysUser = sysUserService.getSysUserByUserName(username);
return ApiResult.ok(sysUser);
}

/**
* 系统用户分页列表
*/
@PostMapping("/getPageList")
@ApiOperation(value = "获取SysUser分页列表", notes = "系统用户分页列表", response = SysUserQueryVo.class)
public ApiResult<PageTool<SysUserQueryVo>> getSysUserPageList(@Valid @RequestBody SysUserQueryParam sysUserQueryParam) throws Exception {
PageTool<SysUserQueryVo> pageList = sysUserService.getSysUserPageList(sysUserQueryParam);
return ApiResult.ok(pageList);
}

/**
* 修改密码
*/
@PostMapping("/updatePassword")
@ApiOperation(value = "修改密码", notes = "修改密码", response = ApiResult.class)
public ApiResult<Boolean> updatePassword(@Valid @RequestBody UpdatePasswordParam updatePasswordParam) throws Exception {
boolean flag = sysUserService.updatePassword(updatePasswordParam);
return ApiResult.result(flag);
}
}


+ 57
- 0
src/main/java/com/xdf/creative/module/entity/SysOrganize.java View File

@@ -0,0 +1,57 @@
package com.xdf.creative.module.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.xdf.creative.base.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.util.Date;

/**
* <p>
* 组织信息
* </p>
*
* @author DeanYe
* @since 2019-11-05
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysOrganize对象", description = "组织信息")
public class SysOrganize extends BaseEntity {

private static final long serialVersionUID = 1L;

@TableId(value = "id", type = IdType.AUTO)
private Long id;

@ApiModelProperty(value = "组织名称")
private String organizeName;

@ApiModelProperty(value = "管辖区域")
private Long popedom_id;

@ApiModelProperty(value = "类型: 0 普通用户 1、园区用户 2 区文创办 3市文创办 8后台管理 ")
private Integer organizeType;

@ApiModelProperty(value = "是否为系统组织: 0 否 1是")
private Integer systemCreate;

@ApiModelProperty(value = "系统状态 0停用 1启用")
private Integer state;

@ApiModelProperty(value = "修该时间")
private Date updateTime;

@ApiModelProperty(value = "创建时间")
private Date createTime;

@ApiModelProperty(value = "父id")
private Long parentId;

}

+ 94
- 0
src/main/java/com/xdf/creative/module/entity/SysPermission.java View File

@@ -0,0 +1,94 @@
package com.xdf.creative.module.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.xdf.creative.base.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
* <p>
* 系统权限
* </p>
*
* @author DeanYe
* @since 2019-11-07
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysPermission对象", description = "系统权限")
public class SysPermission extends BaseEntity {

private static final long serialVersionUID = 1L;

@ApiModelProperty(value = "主键")
@TableId(value = "id", type = IdType.ID_WORKER)
private Long id;

@ApiModelProperty(value = "权限名称")
private String name;

@ApiModelProperty(value = "资源id")
private String resourceId;

@ApiModelProperty(value = "父id")
private String parentResourceId;

@ApiModelProperty(value = "路径")
private String url;

@ApiModelProperty(value = "唯一编码")
private String code;

@ApiModelProperty(value = "图标")
private String icon;

@ApiModelProperty(value = "类型,0 目录 1:菜单,2:按钮 3 url")
private Integer type;

@ApiModelProperty(value = "层级,1:第一级,2:第二级,N:第N级")
private Integer level;

@ApiModelProperty(value = "状态,0:禁用,1:启用")
private Integer state;

@ApiModelProperty(value = "排序")
private Integer sort;

@ApiModelProperty(value = "备注")
private String remark;

@ApiModelProperty(value = "逻辑删除,0:未删除,1:已删除")
private Integer deleted;

@ApiModelProperty(value = "版本")
private Integer version;

@ApiModelProperty(value = "创建时间")
private Date createTime;

@ApiModelProperty(value = "修改时间")
private Date updateTime;


/**
* 用于构造树
*/
@TableField(exist = false)
protected List<SysPermission> children = new ArrayList<SysPermission>();

@TableField(exist = false)
protected Boolean leaf;

@TableField(exist = false)
protected Boolean checked;
}

+ 67
- 0
src/main/java/com/xdf/creative/module/entity/SysRole.java View File

@@ -0,0 +1,67 @@

package com.xdf.creative.module.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.Version;
import com.xdf.creative.base.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Null;
import java.util.Date;

/**
* <pre>
* 系统角色
* </pre>
*
* @author DeanYe
* @since 2019-10-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysRole对象", description = "系统角色")
public class SysRole extends BaseEntity {

private static final long serialVersionUID = 1L;

@ApiModelProperty(value = "主键")
@TableId(value = "id", type = IdType.ID_WORKER)
private Long id;

@ApiModelProperty(value = "角色名称")
@NotBlank(message = "角色名称不能为空")
private String name;

@ApiModelProperty(value = "角色唯一编码")
private String code;

@ApiModelProperty(value = "角色类型")
private Integer type;

@ApiModelProperty(value = "角色状态,0:禁用,1:启用")
private Integer state;

@ApiModelProperty(value = "备注")
private String remark;

@ApiModelProperty(value = "版本")
@Null(message = "版本不用传")
@Version
private Integer version;

@ApiModelProperty(value = "创建时间")
@Null(message = "创建时间不用传")
private Date createTime;

@ApiModelProperty(value = "修改时间")
@Null(message = "修改时间不用传")
private Date updateTime;

}

+ 65
- 0
src/main/java/com/xdf/creative/module/entity/SysRolePermission.java View File

@@ -0,0 +1,65 @@

package com.xdf.creative.module.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.Version;
import com.xdf.creative.base.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.util.Date;

/**
* <pre>
* 角色权限关系
* </pre>
*
* @author DeanYe
* @since 2019-10-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysRolePermission对象", description = "角色权限关系")
public class SysRolePermission extends BaseEntity {

private static final long serialVersionUID = 1L;

@ApiModelProperty(value = "主键")
@TableId(value = "id", type = IdType.AUTO)
private Long id;

@ApiModelProperty(value = "角色id")
@NotNull(message = "角色id不能为空")
private Long roleId;

@ApiModelProperty(value = "权限id")
@NotNull(message = "权限id不能为空")
private String permissionId;

@ApiModelProperty(value = "状态,0:禁用,1:启用")
private Integer state;

@ApiModelProperty(value = "备注")
private String remark;

@ApiModelProperty(value = "版本")
@Null(message = "版本不用传")
@Version
private Integer version;

@ApiModelProperty(value = "创建时间")
@Null(message = "创建时间不用传")
private Date createTime;

@ApiModelProperty(value = "修改时间")
@Null(message = "修改时间不用传")
private Date updateTime;

}

+ 98
- 0
src/main/java/com/xdf/creative/module/entity/SysUser.java View File

@@ -0,0 +1,98 @@

package com.xdf.creative.module.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.xdf.creative.base.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.Set;

/**
* <pre>
* 系统用户
* </pre>
*
* @author DeanYe
* @since 2019-10-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysUser对象", description = "系统用户")
public class SysUser extends BaseEntity {

private static final long serialVersionUID = 1L;

@ApiModelProperty(value = "主键")
@TableId(value = "id", type = IdType.ID_WORKER)
private Long id;

@ApiModelProperty(value = "用户名")
@NotBlank(message = "用户名不能为空")
private String username;

@ApiModelProperty(value = "昵称")
private String nickname;

@ApiModelProperty(value = "密码")
@NotBlank(message = "密码不能为空")
private String password;

@ApiModelProperty(value = "盐值")
private String salt;

@ApiModelProperty(value = "手机号码")
@NotBlank(message = "手机号码不能为空")
private String phone;

@ApiModelProperty(value = "邮箱")
private String email;

@ApiModelProperty(value = "状态,0:禁用,1:启用,2:锁定")
private Integer state;

@ApiModelProperty(value = "角色id")
@TableField(exist = false)
private Set<Long> roleId;

@ApiModelProperty(value = "性别,0:女,1:男,默认1")
private Integer gender;

@ApiModelProperty(value = "头像")
private String head;

@ApiModelProperty(value = "0 普通用户 1、园区 2 区文创办 3 市文创办 8后台管理")
private Integer userType;

@ApiModelProperty(value = "组织id")
@NotNull(message = "组织不能为空")
private Long organizeId;

@ApiModelProperty(value = "创建者id")
private Long createUserId;

@ApiModelProperty(value = "逻辑删除,0:未删除,1:已删除")
private Integer deleted;

@ApiModelProperty(value = "版本")
private Integer version;

@ApiModelProperty(value = "remark")
private String remark;

@ApiModelProperty(value = "创建时间")
private Date createTime;

@ApiModelProperty(value = "修改时间")
private Date updateTime;

}

+ 44
- 0
src/main/java/com/xdf/creative/module/entity/SysUserRole.java View File

@@ -0,0 +1,44 @@
package com.xdf.creative.module.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.xdf.creative.base.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotNull;
import java.util.Date;

/**
* <p>
* 系统用户角色表
* </p>
*
* @author DeanYe
* @since 2019-10-30
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysUserRole对象", description = "系统用户角色表")
public class SysUserRole extends BaseEntity {

private static final long serialVersionUID = 1L;

@TableId(value = "id", type = IdType.AUTO)
@NotNull(message = "不能为空")
private Long id;

@ApiModelProperty(value = "用户ID")
private Long userId;

@ApiModelProperty(value = "角色ID")
private Long roleId;

@ApiModelProperty(value = "创建时间")
private Date createTime;

}

+ 56
- 0
src/main/java/com/xdf/creative/module/mapper/SysOrganizeMapper.java View File

@@ -0,0 +1,56 @@
package com.xdf.creative.module.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xdf.creative.base.params.creative.IsEnableSysOrganizeParam;
import com.xdf.creative.base.params.creative.SysOrganizeQueryParam;
import com.xdf.creative.base.vo.creative.SysOrganizeQueryVo;
import com.xdf.creative.module.entity.SysOrganize;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.io.Serializable;

/**
* 组织信息 Mapper 接口
*/
@Repository
public interface SysOrganizeMapper extends BaseMapper<SysOrganize> {

/**
* 根据用户id
*
* @param userId
* @return
*/
SysOrganizeQueryVo getSysOrganizeByUserId(Long userId);

/**
* 根据ID获取查询对象
*
* @param id
* @return
*/
SysOrganizeQueryVo getSysOrganizeById(Serializable id);

/**
* 获取分页对象
*
* @param page
* @param sysOrganizeQueryParam
* @return
*/
IPage<SysOrganizeQueryVo> getSysOrganizePageList(@Param("page") Page page, @Param("param") SysOrganizeQueryParam sysOrganizeQueryParam);


/**
* 检查当前用户组织是否可用
*
* @param isEnableSysOrganizeParam
* @return
* @throws Exception
*/
Integer isEnableSysOrganize(IsEnableSysOrganizeParam isEnableSysOrganizeParam) throws Exception;

}

+ 83
- 0
src/main/java/com/xdf/creative/module/mapper/SysPermissionMapper.java View File

@@ -0,0 +1,83 @@

package com.xdf.creative.module.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xdf.creative.base.params.creative.SysPermissionQueryParam;
import com.xdf.creative.base.vo.creative.SysPermissionQueryVo;
import com.xdf.creative.module.entity.SysPermission;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.io.Serializable;
import java.util.List;

/**
* <pre>
* 系统权限 Mapper 接口
* </pre>
*
* @author DeanYe
* @since 2019-10-24
*/
@Repository
public interface SysPermissionMapper extends BaseMapper<SysPermission> {

/**
* 根据ID获取查询对象
*
* @param id
* @return
*/
SysPermissionQueryVo getSysPermissionById(Serializable id);

/**
* 获取分页对象
*
* @param page
* @param sysPermissionQueryParam
* @return
*/
IPage<SysPermissionQueryVo> getSysPermissionPageList(@Param("page") Page page, @Param("param") SysPermissionQueryParam sysPermissionQueryParam);


/**
* 根据用户id获取该用户所有Url
* 一个用户可以映射多个角色
*
* @param userId
* @return
*/
List<String> getPermissionUrlByUserId(@Param("userId") Long userId);

/**
* 根据用户id获取菜单列表
*
* @param userId
* @return
*/
List<SysPermission> getMenuListByUserId(@Param("userId") Long userId);

/**
* 根据用户ID获取菜单
*
* @param userId
* @return
*/
List<Object> getMenusByUserId(@Param("userId") Long userId);

/**
* 获取用户角色授权资源 树
*/
List<Object> impowerResourceTreeList(@Param("userId") Long userId);

/**
* 获取不需要鉴权urls
*
* @return
*/
List<String> getSkipAuthUrls();


}

+ 47
- 0
src/main/java/com/xdf/creative/module/mapper/SysRoleMapper.java View File

@@ -0,0 +1,47 @@

package com.xdf.creative.module.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xdf.creative.base.params.creative.SysRoleQueryParam;
import com.xdf.creative.base.vo.creative.SysRoleQueryVo;
import com.xdf.creative.module.entity.SysRole;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.io.Serializable;
import java.util.List;

/**
* <pre>
* 系统角色 Mapper 接口
* </pre>
*
* @author DeanYe
* @since 2019-10-24
*/
@Repository
public interface SysRoleMapper extends BaseMapper<SysRole> {

/**
* 根据ID获取查询对象
*
* @param id
* @return
*/
SysRoleQueryVo getSysRoleById(Serializable id);

/**
* 获取分页对象
*
* @param page
* @param sysRoleQueryParam
* @return
*/
IPage<SysRoleQueryVo> getSysRolePageList(@Param("page") Page page, @Param("param") SysRoleQueryParam sysRoleQueryParam);


List<SysRoleQueryVo> getUserRoleByUserId(Long userId);

}

+ 51
- 0
src/main/java/com/xdf/creative/module/mapper/SysRolePermissionMapper.java View File

@@ -0,0 +1,51 @@

package com.xdf.creative.module.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xdf.creative.base.params.creative.SysRolePermissionQueryParam;
import com.xdf.creative.base.vo.creative.SysRolePermissionQueryVo;
import com.xdf.creative.module.entity.SysRolePermission;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.io.Serializable;
import java.util.Set;

/**
* <pre>
* 角色权限关系 Mapper 接口
* </pre>
*
* @author DeanYe
* @since 2019-10-24
*/
@Repository
public interface SysRolePermissionMapper extends BaseMapper<SysRolePermission> {

/**
* 根据ID获取查询对象
*
* @param id
* @return
*/
SysRolePermissionQueryVo getSysRolePermissionById(Serializable id);

/**
* 获取分页对象
*
* @param page
* @param sysRolePermissionQueryParam
* @return
*/
IPage<SysRolePermissionQueryVo> getSysRolePermissionPageList(@Param("page") Page page, @Param("param") SysRolePermissionQueryParam sysRolePermissionQueryParam);

/**
* 根据角色id获取可用的权限编码
*
* @param roleId
* @return
*/
Set<String> getPermissionCodesByRoleId(@Param("roleId") Long roleId);
}

+ 46
- 0
src/main/java/com/xdf/creative/module/mapper/SysUserMapper.java View File

@@ -0,0 +1,46 @@

package com.xdf.creative.module.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xdf.creative.base.params.creative.SysUserQueryParam;
import com.xdf.creative.base.vo.creative.SysUserQueryVo;
import com.xdf.creative.module.entity.SysUser;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.io.Serializable;

/**
* <pre>
* 系统用户 Mapper 接口
* </pre>
*
* @author DeanYe
* @since 2019-10-24
*/
@Repository
public interface SysUserMapper extends BaseMapper<SysUser> {

/**
* 根据ID获取查询对象
*
* @param id
* @return
*/
SysUserQueryVo getSysUserById(Serializable id);

/**
* 获取分页对象
*
* @param page
* @param sysUserQueryParam
* @return
*/
IPage<SysUserQueryVo> getSysUserPageList(@Param("page") Page page, @Param("param") SysUserQueryParam sysUserQueryParam);


SysUser getSysUserByUserName(@Param("username") String username);

}

+ 43
- 0
src/main/java/com/xdf/creative/module/mapper/SysUserRoleMapper.java View File

@@ -0,0 +1,43 @@
package com.xdf.creative.module.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xdf.creative.base.params.creative.SysUserRoleQueryParam;
import com.xdf.creative.base.vo.creative.SysUserRoleQueryVo;
import com.xdf.creative.module.entity.SysUserRole;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.io.Serializable;

/**
* <p>
* 系统用户角色表 Mapper 接口
* </p>
*
* @author DeanYe
* @since 2019-10-30
*/
@Repository
public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {

/**
* 根据ID获取查询对象
*
* @param id
* @return
*/
SysUserRoleQueryVo getSysUserRoleById(Serializable id);

/**
* 获取分页对象
*
* @param page
* @param sysUserRoleQueryParam
* @return
*/
IPage<SysUserRoleQueryVo> getSysUserRolePageList(@Param("page") Page page, @Param(Constants.WRAPPER) SysUserRoleQueryParam sysUserRoleQueryParam);

}

+ 46
- 0
src/main/java/com/xdf/creative/module/service/SysOrganizeService.java View File

@@ -0,0 +1,46 @@
package com.xdf.creative.module.service;

import com.xdf.creative.base.params.creative.IsEnableSysOrganizeParam;
import com.xdf.creative.base.params.creative.SysOrganizeQueryParam;
import com.xdf.creative.base.service.BaseService;
import com.xdf.creative.base.vo.creative.SysOrganizeQueryVo;
import com.xdf.creative.module.entity.SysOrganize;
import com.xdf.creative.util.page.ApiResult;
import com.xdf.creative.util.page.PageTool;

import java.io.Serializable;

/**
* <p>
* 组织信息 服务类
* </p>
*
* @author DeanYe
* @since 2019-11-05
*/
public interface SysOrganizeService extends BaseService<SysOrganize> {

/**
* 根据ID获取查询对象
*
* @param id
* @return
*/
SysOrganizeQueryVo getSysOrganizeById(Serializable id) throws Exception;

/**
* 获取分页对象
*
* @param sysOrganizeQueryParam
* @return
*/
PageTool<SysOrganizeQueryVo> getSysOrganizePageList(SysOrganizeQueryParam sysOrganizeQueryParam) throws Exception;

/**
* 检查组织是否可用
*
* @return
* @throws Exception
*/
boolean isEnableSysOrganize(IsEnableSysOrganizeParam isEnableSysOrganizeParam) throws Exception;
}

+ 139
- 0
src/main/java/com/xdf/creative/module/service/SysPermissionService.java View File

@@ -0,0 +1,139 @@

package com.xdf.creative.module.service;


import com.xdf.creative.base.params.creative.SysPermissionQueryParam;
import com.xdf.creative.base.service.BaseService;
import com.xdf.creative.base.vo.creative.SysPermissionQueryVo;
import com.xdf.creative.module.entity.SysPermission;
import com.xdf.creative.util.page.PageTool;

import java.io.Serializable;
import java.util.List;
import java.util.Set;

/**
* <pre>
* 系统权限 服务类
* </pre>
*
* @author DeanYe
* @since 2019-10-24
*/
public interface SysPermissionService extends BaseService<SysPermission> {

/**
* 保存
*
* @param sysPermission
* @return
* @throws Exception
*/
boolean saveSysPermission(SysPermission sysPermission) throws Exception;

/**
* 修改
*
* @param sysPermission
* @return
* @throws Exception
*/
boolean updateSysPermission(SysPermission sysPermission) throws Exception;

/**
* 删除
*
* @param resourceId
* @return
* @throws Exception
*/
boolean deleteSysPermission(String resourceId) throws Exception;

/**
* 根据ID获取查询对象
*
* @param resourceId
* @return
* @throws Exception
*/
SysPermissionQueryVo getSysPermissionById(Serializable resourceId) throws Exception;

/**
* 获取分页对象
*
* @param sysPermissionQueryParam
* @return
* @throws Exception
*/
PageTool<SysPermissionQueryVo> getSysPermissionPageList(SysPermissionQueryParam sysPermissionQueryParam) throws Exception;

/**
* 判断权限id是否存在
*
* @param permissionIds
* @return
* @throws Exception
*/
boolean isExistsByPermissionIds(List<String> permissionIds) throws Exception;

/**
* 获取所有菜单列表
*
* @return
* @throws Exception
*/
List<SysPermission> getAllMenuList() throws Exception;

/**
* 获取角色授权资源树
*
* @return
* @throws Exception
*/
List<Object> impowerResourceTreeList(Long userId) throws Exception;


/**
* 根据用户id获取菜单列表
*
* @param userId
* @return
* @throws Exception
*/
List<SysPermission> getMenuListByUserId(Long userId) throws Exception;


/**
* @param userId
* @return
* @throws Exception
*/
List<Object> getTreeMenusByUserId(Long userId) throws Exception;


/**
* 根据请用户id取权限路径集合
*
* @param userId
* @return
*/
Set<String> getPermissionUrlByUserId(Long userId) throws Exception;

/**
* 给超级管理角色员赋予所有权限
*
* @param userId
* @param roleId
* @return
* @throws Exception
*/
Boolean setPermissionToRoleByUserId(Long userId, Long roleId) throws Exception;

/**
* 获取不需要鉴权url
*
* @return
*/
List<String> getSkipAuthUrls() throws Exception;

}

+ 77
- 0
src/main/java/com/xdf/creative/module/service/SysRolePermissionService.java View File

@@ -0,0 +1,77 @@

package com.xdf.creative.module.service;

import com.xdf.creative.base.service.BaseService;
import com.xdf.creative.module.entity.SysRolePermission;
import org.apache.commons.collections4.SetUtils;

import java.util.List;
import java.util.Set;

/**
* <pre>
* 角色权限关系 服务类
* </pre>
*
* @author DeanYe
* @since 2019-10-24
*/
public interface SysRolePermissionService extends BaseService<SysRolePermission> {

/**
* 保存
*
* @param roleId
* @param permissionIds
* @return
* @throws Exception
*/
boolean saveSysRolePermission(Long roleId, List<String> permissionIds) throws Exception;

/**
* 根据角色id获取权限id列表
*
* @param roleId
* @return
* @throws Exception
*/
List<String> getPermissionIdsByRoleId(Long roleId) throws Exception;

/**
* 批量保存角色权限关系
*
* @param roleId
* @param addSet
* @return
* @throws Exception
*/
boolean saveSysRolePermissionBatch(Long roleId, SetUtils.SetView addSet) throws Exception;

/**
* 根据角色id删除关联的权限关系
*
* @param roleId
* @return
* @throws Exception
*/
boolean deleteSysRolePermissionByRoleId(Long roleId) throws Exception;

/**
* 根据角色id获取可用的权限编码
*
* @param roleId
* @return
* @throws Exception
*/
Set<String> getPermissionCodesByRoleId(Long roleId) throws Exception;

/**
* 通过角色id判断在角色权限表中是否有数据存在
*
* @param permissionId
* @return
* @throws Exception
*/
boolean isExistsByPermissionId(String permissionId) throws Exception;

}

+ 96
- 0
src/main/java/com/xdf/creative/module/service/SysRoleService.java View File

@@ -0,0 +1,96 @@

package com.xdf.creative.module.service;


import com.xdf.creative.base.params.creative.AddSysRoleParam;
import com.xdf.creative.base.params.creative.SysRoleQueryParam;
import com.xdf.creative.base.params.creative.UpdateSysRoleParam;
import com.xdf.creative.base.service.BaseService;
import com.xdf.creative.base.vo.creative.SysRoleQueryVo;
import com.xdf.creative.module.entity.SysRole;
import com.xdf.creative.util.page.PageTool;

import java.io.Serializable;
import java.util.List;
import java.util.Set;

/**
* <pre>
* 系统角色 服务类
* </pre>
*
* @author DeanYe
* @since 2019-10-24
*/
public interface SysRoleService extends BaseService<SysRole> {

/**
* 保存
*
* @param addSysRoleParam
* @return
* @throws Exception
*/
boolean saveSysRole(AddSysRoleParam addSysRoleParam) throws Exception;

/**
* 修改
*
* @param updateSysRoleParam
* @return
* @throws Exception
*/
boolean updateSysRole(UpdateSysRoleParam updateSysRoleParam) throws Exception;

/**
* 删除
*
* @param id
* @return
* @throws Exception
*/
boolean deleteSysRole(Long id) throws Exception;

/**
* 根据ID获取查询对象
*
* @param id
* @return
* @throws Exception
*/
SysRoleQueryVo getSysRoleById(Serializable id) throws Exception;

/**
* 获取分页对象
*
* @param sysRoleQueryParam
* @return
* @throws Exception
*/
PageTool<SysRoleQueryVo> getSysRolePageList(SysRoleQueryParam sysRoleQueryParam) throws Exception;

/**
* 根据id校验角色是否存在并且已启用
*
* @param id
* @return
* @throws Exception
*/
boolean isEnableSysRole(Long id) throws Exception;


boolean isEnableSysRole(Set<Long> id) throws Exception;

/**
* 判断角色编码是否存在
*
* @param code
* @return
* @throws Exception
*/
boolean isExistsByCode(String code) throws Exception;


List<SysRoleQueryVo> getUserRoleByUserId(Long userId);

}

+ 37
- 0
src/main/java/com/xdf/creative/module/service/SysUserRoleService.java View File

@@ -0,0 +1,37 @@
package com.xdf.creative.module.service;

import com.xdf.creative.base.params.creative.SysUserRoleQueryParam;
import com.xdf.creative.base.service.BaseService;
import com.xdf.creative.base.vo.creative.SysUserRoleQueryVo;
import com.xdf.creative.module.entity.SysUserRole;
import com.xdf.creative.util.page.PageTool;

import java.io.Serializable;

/**
* <p>
* 系统用户角色表 服务类
* </p>
*
* @author DeanYe
* @since 2019-10-30
*/
public interface SysUserRoleService extends BaseService<SysUserRole> {

/**
* 根据ID获取查询对象
*
* @param id
* @return
*/
SysUserRoleQueryVo getSysUserRoleById(Serializable id) throws Exception;

/**
* 获取分页对象
*
* @param sysUserRoleQueryParam
* @return
*/
PageTool<SysUserRoleQueryVo> getSysUserRolePageList(SysUserRoleQueryParam sysUserRoleQueryParam) throws Exception;

}

+ 132
- 0
src/main/java/com/xdf/creative/module/service/SysUserService.java View File

@@ -0,0 +1,132 @@

package com.xdf.creative.module.service;


import com.xdf.creative.base.params.creative.SysUserQueryParam;
import com.xdf.creative.base.params.creative.UpdatePasswordParam;
import com.xdf.creative.base.params.creative.UpdateUserParam;
import com.xdf.creative.base.service.BaseService;
import com.xdf.creative.base.vo.creative.SysUserQueryVo;
import com.xdf.creative.module.entity.SysUser;
import com.xdf.creative.support.auth.LoginParam;
import com.xdf.creative.support.auth.LoginSysUserTokenVo;
import com.xdf.creative.util.page.PageTool;

import java.io.Serializable;
import java.util.Set;

/**
* <pre>
* 系统用户 服务类
* </pre>
*
* @author DeanYe
* @since 2019-10-24
*/
public interface SysUserService extends BaseService<SysUser> {

/**
* 用户登录
*
* @param loginParam
* @return
* @throws Exception
*/
LoginSysUserTokenVo login(LoginParam loginParam) throws Exception;



/**
* 保存
*
* @param sysUser
* @return
* @throws Exception
*/
boolean saveSysUser(SysUser sysUser) throws Exception;

/**
* 修改系统用户信息
*
* @param updateUserParam
* @return
* @throws Exception
*/
boolean updateSysUser(UpdateUserParam updateUserParam) throws Exception;

/**
* 删除
*
* @param id
* @return
* @throws Exception
*/
boolean deleteSysUser(Long id) throws Exception;

/**
* 根据ID获取查询对象
*
* @param id
* @return
* @throws Exception
*/
SysUserQueryVo getSysUserById(Serializable id) throws Exception;

/**
* 获取分页对象
*
* @param sysUserQueryParam
* @return
* @throws Exception
*/
PageTool<SysUserQueryVo> getSysUserPageList(SysUserQueryParam sysUserQueryParam) throws Exception;

/**
* 判断用户名是否存在
*
* @param username
* @return
* @throws Exception
*/
boolean isExistsByUsername(String username) throws Exception;

/**
* 检验部门和角色是否存在并且已启用
*
* @param departmentId
* @param roleId
* @throws Exception
*/
void checkOrganizeAndRole(Long departmentId, Set<Long> roleId) throws Exception;

/**
* 通过角色id判断是否存在可用用户id
*
* @param roleId
* @return
* @throws Exception
*/
boolean isExistsSysUserByRoleId(Long roleId) throws Exception;

/**
* 修改密码
*
* @param updatePasswordParam
* @return
* @throws Exception
*/
boolean updatePassword(UpdatePasswordParam updatePasswordParam) throws Exception;

/**
* 修改系统用户头像
*
* @param id
* @param headPath
* @return
* @throws Exception
*/
boolean updateSysUserHead(Long id, String headPath) throws Exception;


SysUser getSysUserByUserName(String username) throws Exception;
}

+ 61
- 0
src/main/java/com/xdf/creative/module/service/impl/SysOrganizeServiceImpl.java View File

@@ -0,0 +1,61 @@
package com.xdf.creative.module.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xdf.creative.base.params.creative.IsEnableSysOrganizeParam;
import com.xdf.creative.base.params.creative.SysOrganizeQueryParam;
import com.xdf.creative.base.service.impl.BaseServiceImpl;
import com.xdf.creative.base.vo.creative.SysOrganizeQueryVo;
import com.xdf.creative.module.entity.SysOrganize;
import com.xdf.creative.module.mapper.SysOrganizeMapper;
import com.xdf.creative.module.mapper.SysRegionMapper;
import com.xdf.creative.module.service.SysOrganizeService;
import com.xdf.creative.util.page.PageTool;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.io.Serializable;


/**
* <p>
* 组织信息 服务实现类
* </p>
*
* @author DeanYe
* @since 2019-11-05
*/
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class SysOrganizeServiceImpl extends BaseServiceImpl<SysOrganizeMapper, SysOrganize> implements SysOrganizeService {

@Autowired
private SysOrganizeMapper sysOrganizeMapper;
@Autowired
private SysRegionMapper sysRegionMapper;


@Override
public SysOrganizeQueryVo getSysOrganizeById(Serializable id) throws Exception {
return sysOrganizeMapper.getSysOrganizeById(id);
}

@Override
public PageTool<SysOrganizeQueryVo> getSysOrganizePageList(SysOrganizeQueryParam sysOrganizeQueryParam) throws Exception {
Page page = setPageParam(sysOrganizeQueryParam);
IPage<SysOrganizeQueryVo> iPage = sysOrganizeMapper.getSysOrganizePageList(page, sysOrganizeQueryParam);
return new PageTool(iPage);
}


@Override
public boolean isEnableSysOrganize(IsEnableSysOrganizeParam isEnableSysOrganizeParam) throws Exception {
Integer count = sysOrganizeMapper.isEnableSysOrganize(isEnableSysOrganizeParam);
return count > 0;
}


}

+ 187
- 0
src/main/java/com/xdf/creative/module/service/impl/SysPermissionServiceImpl.java View File

@@ -0,0 +1,187 @@

package com.xdf.creative.module.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xdf.creative.base.params.creative.SysPermissionQueryParam;
import com.xdf.creative.base.service.impl.BaseServiceImpl;
import com.xdf.creative.base.vo.creative.SysPermissionQueryVo;
import com.xdf.creative.enums.StateEnum;
import com.xdf.creative.module.entity.SysPermission;
import com.xdf.creative.module.entity.SysRolePermission;
import com.xdf.creative.module.mapper.SysPermissionMapper;
import com.xdf.creative.module.service.SysPermissionService;
import com.xdf.creative.module.service.SysRolePermissionService;
import com.xdf.creative.support.exception.BusinessException;
import com.xdf.creative.util.StringUtil;
import com.xdf.creative.util.page.PageTool;
import com.xdf.creative.util.tree.TreeConfig;
import com.xdf.creative.util.tree.Utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.io.Serializable;
import java.util.*;


/**
* <pre>
* 系统权限 服务实现类
* </pre>
*
* @author DeanYe
* @since 2019-10-25
*/
@Slf4j
@Service
public class SysPermissionServiceImpl extends BaseServiceImpl<SysPermissionMapper, SysPermission> implements SysPermissionService {

@Autowired
private SysPermissionMapper sysPermissionMapper;

@Resource
private SysRolePermissionService sysRolePermissionService;

@Transactional(rollbackFor = Exception.class)
@Override
public boolean saveSysPermission(SysPermission sysPermission) throws Exception {
sysPermission.setId(null);
return super.save(sysPermission);
}

@Transactional(rollbackFor = Exception.class)
@Override
public boolean updateSysPermission(SysPermission sysPermission) throws Exception {
// 获取权限
SysPermission updateSysPermission = getById(sysPermission.getResourceId());
if (updateSysPermission == null) {
throw new BusinessException("权限不存在");
}

// 指定需改的字段
updateSysPermission.setParentResourceId(sysPermission.getParentResourceId())
.setLevel(sysPermission.getLevel())
.setName(sysPermission.getName())
.setState(sysPermission.getState())
.setCode(sysPermission.getCode())
.setIcon(sysPermission.getIcon())
.setRemark(sysPermission.getRemark())
.setSort(sysPermission.getSort())
.setType(sysPermission.getType())
.setUrl(sysPermission.getUrl())
.setUpdateTime(new Date());
return super.updateById(updateSysPermission);
}

@Transactional(rollbackFor = Exception.class)
@Override
public boolean deleteSysPermission(String resourceId) throws Exception {
boolean isExists = sysRolePermissionService.isExistsByPermissionId(resourceId);
if (isExists) {
throw new BusinessException("该权限存在角色关联关系,不能删除");
}
return super.removeById(resourceId);
}

@Override
public SysPermissionQueryVo getSysPermissionById(Serializable id) throws Exception {
return sysPermissionMapper.getSysPermissionById(id);
}

@Override
public PageTool<SysPermissionQueryVo> getSysPermissionPageList(SysPermissionQueryParam sysPermissionQueryParam) throws Exception {
Page page = setPageParam(sysPermissionQueryParam);
IPage<SysPermissionQueryVo> iPage = sysPermissionMapper.getSysPermissionPageList(page, sysPermissionQueryParam);
return new PageTool(iPage);
}

@Override
public boolean isExistsByPermissionIds(List<String> permissionIds) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.in("resourceId", permissionIds);
return sysPermissionMapper.selectCount(queryWrapper).intValue() == permissionIds.size();
}

@Override
public List<SysPermission> getAllMenuList() throws Exception {
SysPermission sysPermission = new SysPermission().setState(StateEnum.ENABLE.ordinal());
// 获取所有已启用的权限列表
return sysPermissionMapper.selectList(new QueryWrapper(sysPermission));
}

/**
* 获取角色授权资源树
*
* @param userId
* @return
* @throws Exception
*/
@Override
public List<Object> impowerResourceTreeList(Long userId) throws Exception {
return sysPermissionMapper.impowerResourceTreeList(userId);
}


@Override
public List<SysPermission> getMenuListByUserId(Long userId) throws Exception {
return sysPermissionMapper.getMenuListByUserId(userId);
}

@Override
public List<Object> getTreeMenusByUserId(Long userId) throws Exception {
// 获取所有已启用的权限列表
List<Object> list = sysPermissionMapper.getMenusByUserId(userId);
TreeConfig config = new TreeConfig("resourceId", "parentResourceId", "parentResourceId", "01", "");
List<Object> objectList = Utils.tree(list, config);
return objectList;
}


@Override
public Set<String> getPermissionUrlByUserId(Long userId) throws Exception {
List<String> permissionUrls = sysPermissionMapper.getPermissionUrlByUserId(userId);

HashSet<String> stringHashSet = new HashSet<>();
permissionUrls.stream().forEach(s -> {
if (StringUtil.isNotEmpty(s)) {
if (s.contains(";")) {
String[] url = s.split(s);
for (String s1 : url) {
stringHashSet.add(s1);
}
} else {
stringHashSet.add(s);
}
}
});
return stringHashSet;
}

@Override
public Boolean setPermissionToRoleByUserId(Long userId, Long roleId) throws Exception {
QueryWrapper queryWrapper = new QueryWrapper();
List<SysPermission> list = sysPermissionMapper.selectList(queryWrapper);

List<SysRolePermission> sysRolePermissions = new ArrayList<>();
list.stream().forEach(sysPermission -> {
SysRolePermission sysRolePermission = new SysRolePermission();
String resourceId = sysPermission.getResourceId();
sysRolePermission.setPermissionId(resourceId);
sysRolePermission.setRoleId(roleId);
sysRolePermission.setRemark(sysPermission.getName());
sysRolePermissions.add(sysRolePermission);
});
boolean isSucceed = sysRolePermissionService.saveBatch(sysRolePermissions, 20);
return isSucceed;
}

@Override
public List<String> getSkipAuthUrls() throws Exception {
List<String> skipAuthUrls = sysPermissionMapper.getSkipAuthUrls();
return skipAuthUrls;
}
}

+ 94
- 0
src/main/java/com/xdf/creative/module/service/impl/SysRolePermissionServiceImpl.java View File

@@ -0,0 +1,94 @@

package com.xdf.creative.module.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.xdf.creative.base.service.impl.BaseServiceImpl;
import com.xdf.creative.enums.StateEnum;
import com.xdf.creative.module.entity.SysRolePermission;
import com.xdf.creative.module.mapper.SysRolePermissionMapper;
import com.xdf.creative.module.service.SysRolePermissionService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.SetUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;


/**
* <pre>
* 角色权限关系 服务实现类
* </pre>
*
* @author DeanYe
* @since 2019-10-25
*/
@Slf4j
@Service
public class SysRolePermissionServiceImpl extends BaseServiceImpl<SysRolePermissionMapper, SysRolePermission> implements SysRolePermissionService {

@Autowired
private SysRolePermissionMapper sysRolePermissionMapper;

@Transactional(rollbackFor = Exception.class)
@Override
public boolean saveSysRolePermission(Long roleId, List<String> permissionIds) throws Exception {
List<SysRolePermission> list = new ArrayList<>();
permissionIds.forEach(permissionId -> {
SysRolePermission sysRolePermission = new SysRolePermission()
.setRoleId(roleId)
.setPermissionId(permissionId)
.setState(StateEnum.ENABLE.ordinal());
list.add(sysRolePermission);
});
// 批量保存角色权限中间表
return saveBatch(list, 20);
}

@Override
public List<String> getPermissionIdsByRoleId(Long roleId) throws Exception {
SysRolePermission sysRolePermission = new SysRolePermission()
.setRoleId(roleId)
.setState(StateEnum.ENABLE.ordinal());
QueryWrapper queryWrapper = new QueryWrapper(sysRolePermission, "permission_id");
return sysRolePermissionMapper.selectObjs(queryWrapper);
}

@Override
public boolean saveSysRolePermissionBatch(Long roleId, SetUtils.SetView addSet) {
List<SysRolePermission> list = new ArrayList<>();
addSet.forEach(id -> {
SysRolePermission sysRolePermission = new SysRolePermission();
String permissionId = (String) id;
sysRolePermission
.setRoleId(roleId)
.setPermissionId(permissionId)
.setState(StateEnum.ENABLE.ordinal());
list.add(sysRolePermission);
});
return saveBatch(list, 20);
}

@Override
public boolean deleteSysRolePermissionByRoleId(Long roleId) throws Exception {
SysRolePermission sysRolePermission = new SysRolePermission()
.setRoleId(roleId);
return remove(new QueryWrapper<>(sysRolePermission));
}

@Override
public Set<String> getPermissionCodesByRoleId(Long roleId) throws Exception {
return sysRolePermissionMapper.getPermissionCodesByRoleId(roleId);
}

@Override
public boolean isExistsByPermissionId(String permissionId) throws Exception {
// 判断角色权限表是否有关联存在,如果存在,则不能删除
SysRolePermission sysRolePermission = new SysRolePermission()
.setPermissionId(permissionId);
return count(new QueryWrapper(sysRolePermission)) > 0;
}
}

+ 217
- 0
src/main/java/com/xdf/creative/module/service/impl/SysRoleServiceImpl.java View File

@@ -0,0 +1,217 @@

package com.xdf.creative.module.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xdf.creative.base.params.creative.AddSysRoleParam;
import com.xdf.creative.base.params.creative.SysRoleQueryParam;
import com.xdf.creative.base.params.creative.UpdateSysRoleParam;
import com.xdf.creative.base.service.impl.BaseServiceImpl;
import com.xdf.creative.base.vo.creative.SysRoleQueryVo;
import com.xdf.creative.enums.StateEnum;
import com.xdf.creative.module.entity.SysRole;
import com.xdf.creative.module.mapper.SysRoleMapper;
import com.xdf.creative.module.service.SysPermissionService;
import com.xdf.creative.module.service.SysRolePermissionService;
import com.xdf.creative.module.service.SysRoleService;
import com.xdf.creative.module.service.SysUserService;
import com.xdf.creative.support.exception.BusinessException;
import com.xdf.creative.support.exception.DaoException;
import com.xdf.creative.util.convert.SysRoleConvert;
import com.xdf.creative.util.page.PageTool;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.SetUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;


/**
* <pre>
* 系统角色 服务实现类
* </pre>
*
* @author DeanYe
* @since 2019-10-24
*/
@Slf4j
@Service
public class SysRoleServiceImpl extends BaseServiceImpl<SysRoleMapper, SysRole> implements SysRoleService {

@Autowired
private SysRoleMapper sysRoleMapper;

@Resource
private SysPermissionService sysPermissionService;

@Resource
private SysRolePermissionService sysRolePermissionService;

@Resource
private SysUserService sysUserService;

@Transactional(rollbackFor = Exception.class)
@Override
public boolean saveSysRole(AddSysRoleParam addSysRoleParam) throws Exception {
String code = addSysRoleParam.getCode();
List<String> permissionIds = addSysRoleParam.getPermissionIds();
// 校验角色标识code唯一性
if (isExistsByCode(code)) {
throw new BusinessException("角色编码已存在");
}
// 校验权限列表是否存在
if (!sysPermissionService.isExistsByPermissionIds(permissionIds)) {
throw new BusinessException("权限id不存在");
}

// 保存角色
SysRole sysRole = SysRoleConvert.INSTANCE.addSysRoleParamToSysRole(addSysRoleParam);
boolean saveRoleResult = super.save(sysRole);
if (!saveRoleResult) {
throw new DaoException("保存角色失败");
}

// 保存角色权限
Long roleId = sysRole.getId();
boolean saveRolePermissionResult = sysRolePermissionService.saveSysRolePermission(roleId, permissionIds);
if (!saveRolePermissionResult) {
throw new DaoException("保存角色权限失败");
}
return true;
}

@Transactional(rollbackFor = Exception.class)
@Override
public boolean updateSysRole(UpdateSysRoleParam updateSysRoleParam) throws Exception {
Long roleId = updateSysRoleParam.getId();
List<String> 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<String> 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<String> beforeSet = new HashSet<>(beforeList);
Set<String> 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;
}

@Transactional(rollbackFor = Exception.class)
@Override
public boolean deleteSysRole(Long id) throws Exception {
// 判断该角色下是否有可用用户,如果有,则不能删除
boolean isExistsUser = sysUserService.isExistsSysUserByRoleId(id);
if (isExistsUser) {
throw new DaoException("该角色下还存在可用用户,不能删除");
}
// 角色逻辑删除
boolean deleteRoleResult = removeById(id);
if (!deleteRoleResult) {
throw new DaoException("删除角色失败");
}
// 角色权限关系真实删除
boolean deletePermissionResult = sysRolePermissionService.deleteSysRolePermissionByRoleId(id);
if (!deletePermissionResult) {
throw new DaoException("删除角色权限关系失败");
}
return true;
}

@Override
public SysRoleQueryVo getSysRoleById(Serializable id) throws Exception {
return sysRoleMapper.getSysRoleById(id);
}

@Override
public PageTool<SysRoleQueryVo> getSysRolePageList(SysRoleQueryParam sysRoleQueryParam) throws Exception {
Page page = setPageParam(sysRoleQueryParam);
IPage<SysRoleQueryVo> iPage = sysRoleMapper.getSysRolePageList(page, sysRoleQueryParam);
return new PageTool(iPage);
}

@Override
public boolean isEnableSysRole(Long id) throws Exception {
SysRole sysRole = new SysRole()
.setId(id)
.setState(StateEnum.ENABLE.ordinal());
int count = sysRoleMapper.selectCount(new QueryWrapper<>(sysRole));
return count > 0;
}

@Override
public boolean isEnableSysRole(Set<Long> ids) throws Exception {

for (Long id : ids) {
SysRole sysRole = new SysRole()
.setId(id)
.setState(StateEnum.ENABLE.ordinal());
int count = sysRoleMapper.selectCount(new QueryWrapper<>(sysRole));
if (count == 0) {
return false;
}
}
return true;
}

@Override
public boolean isExistsByCode(String code) throws Exception {
SysRole sysRole = new SysRole().setCode(code);
return sysRoleMapper.selectCount(new QueryWrapper<>(sysRole)) > 0;
}

@Override
public List<SysRoleQueryVo> getUserRoleByUserId(Long userId) {
return sysRoleMapper.getUserRoleByUserId(userId);
}


}

+ 48
- 0
src/main/java/com/xdf/creative/module/service/impl/SysUserRoleServiceImpl.java View File

@@ -0,0 +1,48 @@
package com.xdf.creative.module.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xdf.creative.base.params.creative.SysUserRoleQueryParam;
import com.xdf.creative.base.service.impl.BaseServiceImpl;
import com.xdf.creative.base.vo.creative.SysUserRoleQueryVo;
import com.xdf.creative.module.entity.SysUserRole;
import com.xdf.creative.module.mapper.SysUserRoleMapper;
import com.xdf.creative.module.service.SysUserRoleService;
import com.xdf.creative.util.page.PageTool;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.io.Serializable;


/**
* <p>
* 系统用户角色表 服务实现类
* </p>
*
* @author DeanYe
* @since 2019-10-30
*/
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class SysUserRoleServiceImpl extends BaseServiceImpl<SysUserRoleMapper, SysUserRole> implements SysUserRoleService {

@Autowired
private SysUserRoleMapper sysUserRoleMapper;

@Override
public SysUserRoleQueryVo getSysUserRoleById(Serializable id) throws Exception {
return sysUserRoleMapper.getSysUserRoleById(id);
}

@Override
public PageTool<SysUserRoleQueryVo> getSysUserRolePageList(SysUserRoleQueryParam sysUserRoleQueryParam) throws Exception {
Page page = setPageParam(sysUserRoleQueryParam);
IPage<SysUserRoleQueryVo> iPage = sysUserRoleMapper.getSysUserRolePageList(page, sysUserRoleQueryParam);
return new PageTool(iPage);
}

}

+ 358
- 0
src/main/java/com/xdf/creative/module/service/impl/SysUserServiceImpl.java View File

@@ -0,0 +1,358 @@

package com.xdf.creative.module.service.impl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xdf.creative.base.params.creative.IsEnableSysOrganizeParam;
import com.xdf.creative.base.params.creative.SysUserQueryParam;
import com.xdf.creative.base.params.creative.UpdatePasswordParam;
import com.xdf.creative.base.params.creative.UpdateUserParam;
import com.xdf.creative.base.service.impl.BaseServiceImpl;
import com.xdf.creative.base.vo.creative.SysOrganizeQueryVo;
import com.xdf.creative.base.vo.creative.SysRoleQueryVo;
import com.xdf.creative.base.vo.creative.SysUserQueryVo;
import com.xdf.creative.enums.ApiCode;
import com.xdf.creative.enums.StateEnum;
import com.xdf.creative.module.entity.SysUser;
import com.xdf.creative.module.entity.SysUserRole;
import com.xdf.creative.module.mapper.SysUserMapper;
import com.xdf.creative.module.service.SysOrganizeService;
import com.xdf.creative.module.service.SysRoleService;
import com.xdf.creative.module.service.SysUserRoleService;
import com.xdf.creative.module.service.SysUserService;
import com.xdf.creative.shiro.jwt.JwtProperties;
import com.xdf.creative.shiro.jwt.JwtToken;
import com.xdf.creative.shiro.jwt.JwtUtil;
import com.xdf.creative.shiro.jwt.SaltUtil;
import com.xdf.creative.support.auth.LoginParam;
import com.xdf.creative.support.auth.LoginSysUserTokenVo;
import com.xdf.creative.support.auth.LoginSysUserVo;
import com.xdf.creative.support.exception.BusinessException;
import com.xdf.creative.support.exception.SysLoginException;
import com.xdf.creative.util.PasswordUtil;
import com.xdf.creative.util.StringUtil;
import com.xdf.creative.util.UUIDUtil;
import com.xdf.creative.util.convert.SysUserConvert;
import com.xdf.creative.util.page.PageTool;
import lombok.extern.slf4j.Slf4j;
import cn.hutool.core.collection.CollectionUtil;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.io.Serializable;
import java.time.Duration;
import java.util.*;


/**
* <pre>
* 系统用户 服务实现类
* </pre>
*
* @author DeanYe
* @since 2019-10-24
*/
@Slf4j
@Service
public class SysUserServiceImpl extends BaseServiceImpl<SysUserMapper, SysUser> implements SysUserService {

@Autowired
private SysUserMapper sysUserMapper;

@Lazy
@Autowired
private SysRoleService sysRoleService;

@Lazy
@Autowired
private SysOrganizeService sysOrganizeService;

@Lazy
@Autowired
private SysUserRoleService sysUserRoleService;

@Autowired
private JwtProperties jwtProperties;


@Override
public LoginSysUserTokenVo login(LoginParam loginParam) throws Exception {
// 校验验证码
String userName = loginParam.getUsername();
SysUser sysUser = getSysUserByUserName(userName);
if (sysUser == null) {
log.error("登陆失败,用户名不正确,loginParam:{}", loginParam);
throw new SysLoginException(ApiCode.USERNAME_ERROR);
}
if (StateEnum.DISABLE.getKey().equals(sysUser.getState())) {
log.debug("登陆失败,用户不可用,loginParam:{}", loginParam);
throw new SysLoginException(ApiCode.USER_DISABLE);
}

String encryptPassword = PasswordUtil.encrypt(loginParam.getPassword(), sysUser.getSalt());
if (!encryptPassword.equals(sysUser.getPassword())) {
throw new SysLoginException(ApiCode.PASSWORD_ERROR);
}


SysOrganizeQueryVo sysOrganizeQueryVo = sysOrganizeService.getSysOrganizeById(sysUser.getOrganizeId());
if (sysOrganizeQueryVo == null) {
throw new BusinessException("组织不存在");
}
if (!StateEnum.ENABLE.getKey().equals(sysOrganizeQueryVo.getState())) {
throw new BusinessException("组织已禁用");
}
// 将系统用户对象转换成登陆用户对象
LoginSysUserVo loginSysUserVo = SysUserConvert.INSTANCE.sysUserToLoginSysUserVo(sysUser);
loginSysUserVo.setOrganizeId(sysOrganizeQueryVo.getId());

//获取角色id、名称、code
HashSet<Long> roleIdSet = new HashSet<>();
HashSet<String> roleNameSet = new HashSet<>();
HashSet<String> roleCodeSet = new HashSet<>();

List<SysRoleQueryVo> sysRoleQueryVoList = sysRoleService.getUserRoleByUserId(sysUser.getId());
if (CollectionUtil.isEmpty(sysRoleQueryVoList)) {
throw new BusinessException("角色不存在");
}
sysRoleQueryVoList.stream().forEach(sysRoleQueryVo -> {
roleIdSet.add(sysRoleQueryVo.getId());
roleNameSet.add(sysRoleQueryVo.getName());
roleCodeSet.add(sysRoleQueryVo.getCode());
});
loginSysUserVo.setRoleId(roleIdSet)
.setRoleName(roleNameSet)
.setRoleCode(roleCodeSet);
//获取角色url

// 获取数据库中保存的盐值
String newSalt = SaltUtil.getSalt(sysUser.getSalt(), jwtProperties);
// 生成token字符串并返回
Long expireSecond = jwtProperties.getExpireSecond();
String token = JwtUtil.generateToken(sysUser.getId(), userName, sysUser.getOrganizeId(),sysUser.getUserType(), newSalt, Duration.ofSeconds(expireSecond));
log.debug("token:{}", token);
// 创建AuthenticationToken
JwtToken jwtToken = JwtToken.build(token, sysUser.getId(), userName, sysUser.getOrganizeId(),sysUser.getUserType(), newSalt, expireSecond);
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(
loginParam.getUsername(),
loginParam.getPassword());
//进行验证,这里可以捕获异常,然后返回对应信息
subject.login(usernamePasswordToken);

// 返回token和登陆用户信息对象
LoginSysUserTokenVo loginSysUserTokenVo = new LoginSysUserTokenVo();
loginSysUserTokenVo.setToken("12wer234f345g34g45");
loginSysUserTokenVo.setLoginSysUserVo(loginSysUserVo);
return loginSysUserTokenVo;
}




@Transactional(rollbackFor = Exception.class)
@Override
public boolean saveSysUser(SysUser sysUser) throws Exception {
// 校验用户名是否存在
boolean isExists = isExistsByUsername(sysUser.getUsername());
if (isExists) {
throw new BusinessException("用户名已存在");
}
// 校验组织和角色
checkOrganizeAndRole(sysUser.getOrganizeId(), sysUser.getRoleId());
// Long userId = getUserId();//获取当前用户id
// 生成盐值
String salt = UUIDUtil.getUUID();
sysUser.setSalt(salt);
sysUser.setId(null);
//sysUser.setCreateUserId(userId);

// 密码加密
String newPassword = PasswordUtil.encrypt(sysUser.getPassword(), salt);
sysUser.setPassword(newPassword);

// 保存系统用户
return super.save(sysUser);
}

@Transactional(rollbackFor = Exception.class)
@Override
public boolean updateSysUser(UpdateUserParam updateUserParam) throws Exception {

// 获取系统用户
SysUser updateSysUser = getById(updateUserParam.getId());
if (updateSysUser == null) {
throw new BusinessException("修改的用户不存在");
}
// 校验组织和角色
checkOrganizeAndRole(updateUserParam.getOrganizeId(), updateUserParam.getRoleId());

//String jsonStr = (String) redisTemplate.opsForValue().get(String.format(CommonRedisKey.LOGIN_USER, updateSysUser.getUsername()));
//LoginSysUserRedisVo loginSysUserRedisVo = JSONObject.parseObject(jsonStr, LoginSysUserRedisVo.class);
//权限修改
Set<Long> roleIds = updateUserParam.getRoleId();
if (1==1){//CollectionUtil.isNotEmpty(roleIds)) {
QueryWrapper<SysUserRole> queryWrapper = new QueryWrapper();
queryWrapper.eq("user_id", updateUserParam.getId());
sysUserRoleService.remove(queryWrapper);

List<SysUserRole> sysUserRoles = new ArrayList<>();
for (Long roleId : roleIds) {
SysUserRole sysUserRole = new SysUserRole();
sysUserRole.setRoleId(roleId);
sysUserRole.setUserId(updateUserParam.getId());
sysUserRoles.add(sysUserRole);
}
//sysUserRoleService.saveBatch(sysUserRoles);
Set<Long> roleSet = new HashSet<>();
Set<String> roleNameSet = new HashSet<>();
List<SysRoleQueryVo> sysRoleQueryVos = sysRoleService.getUserRoleByUserId(null);//getUserId());
sysRoleQueryVos.stream().forEach(sysRoleQueryVo -> {
roleSet.add(sysRoleQueryVo.getId());
roleNameSet.add(sysRoleQueryVo.getName());
});
// loginSysUserRedisVo.setRoleId(roleSet);
// loginSysUserRedisVo.setRoleName(roleNameSet);
}

// 修改系统用户
updateSysUser.setNickname(updateUserParam.getNickname())
.setPhone(updateUserParam.getPhone())
.setGender(updateUserParam.getGender())
.setRemark(updateUserParam.getRemark())
.setState(updateUserParam.getState())
.setOrganizeId(updateUserParam.getOrganizeId())
.setUpdateTime(new Date());
super.updateById(updateSysUser);

// if (StringUtil.isNotEmpty(updateUserParam.getNickname())) {
// loginSysUserRedisVo.setNickname(updateUserParam.getNickname());
// }
// if (StringUtil.isNotEmpty(updateUserParam.getPhone())) {
// loginSysUserRedisVo.setPhone(updateUserParam.getPhone());
// }
// if (updateUserParam.getGender() != null) {
// loginSysUserRedisVo.setGender(updateUserParam.getGender());
// }
// if (updateUserParam.getState() != null) {
// loginSysUserRedisVo.setState(updateUserParam.getState());
// }
// if (StringUtil.longIsNotEmpty(updateUserParam.getOrganizeId())) {
// loginSysUserRedisVo.setOrgId(updateUserParam.getOrganizeId());
// }
//
//
// Long expireDuration = redisTemplate.getExpire(String.format(CommonRedisKey.LOGIN_USER, updateSysUser.getUsername()));
// redisTemplate.delete(String.format(CommonRedisKey.LOGIN_USER, updateSysUser.getUsername()));
// String key = String.format(CommonRedisKey.LOGIN_USER, updateSysUser.getUsername());
// String val = JSON.toJSONString(loginSysUserRedisVo);
// redisUtil.set(key, val, expireDuration);
return true;
}

@Transactional(rollbackFor = Exception.class)
@Override
public boolean deleteSysUser(Long id) throws Exception {
return super.removeById(id);
}

@Override
public SysUserQueryVo getSysUserById(Serializable id) throws Exception {
return sysUserMapper.getSysUserById(id);
}

@Override
public PageTool<SysUserQueryVo> getSysUserPageList(SysUserQueryParam sysUserQueryParam) throws Exception {
Page page = setPageParam(sysUserQueryParam);
IPage<SysUserQueryVo> iPage = sysUserMapper.getSysUserPageList(page, sysUserQueryParam);
return new PageTool(iPage);
}

@Override
public boolean isExistsByUsername(String username) throws Exception {
SysUser selectSysUser = new SysUser().setUsername(username);
return sysUserMapper.selectCount(new QueryWrapper<>(selectSysUser)) > 0;
}

@Override
public void checkOrganizeAndRole(Long organizeId, Set<Long> roleId) throws Exception {
// 校验组织是否存在并且可用
if (StringUtil.longIsNotEmpty(organizeId)) {
boolean isEnableSysOrganize = sysOrganizeService.isEnableSysOrganize(new IsEnableSysOrganizeParam(null, organizeId));//getUserId(), organizeId));
if (!isEnableSysOrganize) {
throw new BusinessException("该组织不存在或已禁用");
}
}
// 校验角色是否存在并且可用
if (1==1){//CollectionUtil.isNotEmpty(roleId)) {
boolean isEnable = sysRoleService.isEnableSysRole(roleId);
if (!isEnable) {
throw new BusinessException("该角色不存在或已禁用");
}
}

}

@Override
public boolean isExistsSysUserByRoleId(Long roleId) throws Exception {
SysUser sysUser = new SysUser()
.setState(StateEnum.ENABLE.ordinal());
return sysUserMapper.selectCount(new QueryWrapper(sysUser)) > 0;
}

@Override
public boolean updatePassword(UpdatePasswordParam updatePasswordParam) throws Exception {
String oldPassword = updatePasswordParam.getOldPassword();
String newPassword = updatePasswordParam.getNewPassword();
String confirmPassword = updatePasswordParam.getConfirmPassword();
if (!newPassword.equals(confirmPassword)) {
throw new BusinessException("两次输入的密码不一致");
}
if (newPassword.equals(oldPassword)) {
throw new BusinessException("新密码和旧密码不能一致");
}

// 判断原密码是否正确
SysUser sysUser = null;//getById(updatePasswordParam.getUserId());
if (sysUser == null) {
throw new BusinessException("用户不存在");
}
if (StateEnum.DISABLE.getKey().equals(sysUser.getState())) {
throw new BusinessException("用户已禁用");
}
// 密码加密处理
String salt = sysUser.getSalt();
String encryptOldPassword = PasswordUtil.encrypt(oldPassword, salt);
if (!sysUser.getPassword().equals(encryptOldPassword)) {
throw new BusinessException("原密码错误");
}
// 新密码加密
String encryptNewPassword = PasswordUtil.encrypt(newPassword, salt);

// 修改密码
sysUser.setPassword(encryptNewPassword)
.setUpdateTime(new Date());
return updateById(sysUser);
}

@Override
public boolean updateSysUserHead(Long id, String headPath) throws Exception {
SysUser sysUser = new SysUser()
.setId(id)
.setHead(headPath);
return updateById(sysUser);
}

@Override
public SysUser getSysUserByUserName(String username) throws Exception {
return sysUserMapper.getSysUserByUserName(username);
}
}

+ 90
- 0
src/main/java/com/xdf/creative/shiro/CustomRealm.java View File

@@ -0,0 +1,90 @@
package com.xdf.creative.shiro;

import cn.hutool.core.collection.CollectionUtil;
import com.xdf.creative.base.vo.creative.SysRoleQueryVo;
import com.xdf.creative.module.entity.SysUser;
import com.xdf.creative.module.service.SysRoleService;
import com.xdf.creative.module.service.SysUserService;
import com.xdf.creative.support.exception.BusinessException;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.HashSet;
import java.util.List;
public class CustomRealm extends AuthorizingRealm {

private final static Logger log = LoggerFactory.getLogger(AuthorizingRealm.class);

@Autowired
private SysUserService sysUserService;
@Autowired
private SysRoleService sysRoleService;

@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
//获取登录用户名
String name = (String) principalCollection.getPrimaryPrincipal();
//根据用户名去数据库查询用户信息
SysUser user = null;
try {
user = sysUserService.getSysUserByUserName(name);
if(null==user){
return null;
}
} catch (Exception e) {
throw new BusinessException("用户不存在");
}
//添加角色和权限
SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
HashSet<Long> roleIdSet = new HashSet<>();
HashSet<String> roleNameSet = new HashSet<>();
HashSet<String> roleCodeSet = new HashSet<>();

List<SysRoleQueryVo> sysRoleQueryVoList = sysRoleService.getUserRoleByUserId(user.getId());
if (CollectionUtil.isEmpty(sysRoleQueryVoList)) {
throw new BusinessException("角色不存在");
}
sysRoleQueryVoList.stream().forEach(sysRoleQueryVo -> {
roleIdSet.add(sysRoleQueryVo.getId());
roleNameSet.add(sysRoleQueryVo.getName());
roleCodeSet.add(sysRoleQueryVo.getCode());
});
simpleAuthorizationInfo.setRoles(roleCodeSet);
// simpleAuthorizationInfo.addStringPermission(permissions.getPermissionsName());
return simpleAuthorizationInfo;
}

@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
//加这一步的目的是在Post请求的时候会先进认证,然后在到请求
if (authenticationToken.getPrincipal() == null) {
return null;
}
UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) authenticationToken;
//根据用户名去数据库查询用户信息
SysUser user = null;
//获取用户信息
String name =usernamePasswordToken.getUsername();
try {
user = sysUserService.getSysUserByUserName(name);
} catch (Exception e) {
log.error("用户 { "+name+" } 不存在 ");
throw new AccountException("账户不存在");
}
if (user == null) {
//这里返回后会报出对应异常
throw new BusinessException("用户不存在");
} else {
//这里验证authenticationToken和simpleAuthenticationInfo的信息
SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(user, usernamePasswordToken.getPassword().toString(), getName());
return simpleAuthenticationInfo;
}
}
}


+ 31
- 0
src/main/java/com/xdf/creative/shiro/GlobalExceptionHandler.java View File

@@ -0,0 +1,31 @@
package com.xdf.creative.shiro;

import com.xdf.creative.enums.ApiCode;
import com.xdf.creative.util.page.ApiResult;
import org.apache.shiro.authz.UnauthorizedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

import javax.servlet.http.HttpServletRequest;

/**
* @author : lgw
* @date : 16:51 2020/3/3
*/
@ControllerAdvice
public class GlobalExceptionHandler {

@ExceptionHandler(value = UnauthorizedException.class)
public ApiResult jsonExceptionHandler(HttpServletRequest req, Exception e) {
return ApiResult.fail(ApiCode.FAIL, "权限不足!");
}
// @ExceptionHandler(value = UnauthorizedException.class)
// public ModelAndView businessExceptionHandler(){
// ModelAndView mav = new ModelAndView();
// mav.setStatus(HttpStatus.UNAUTHORIZED);
// mav.addObject("message", e.getMessage());
// mav.setViewName("403");
// return mav;
// }
}


+ 103
- 0
src/main/java/com/xdf/creative/shiro/ShiroConfig.java View File

@@ -0,0 +1,103 @@
package com.xdf.creative.shiro;

/**
* @author : lgw
* @date : 15:58 2020/3/3
*/
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.mgt.DefaultSessionStorageEvaluator;
import org.apache.shiro.mgt.DefaultSubjectDAO;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class ShiroConfig {
//不加这个注解不生效,具体不详
@Bean
@ConditionalOnMissingBean
public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
DefaultAdvisorAutoProxyCreator defaultAAP = new DefaultAdvisorAutoProxyCreator();
defaultAAP.setProxyTargetClass(true);
return defaultAAP;
}

//将自己的验证方式加入容器
@Bean
public CustomRealm myShiroRealm() {
CustomRealm customRealm = new CustomRealm();
return customRealm;
}

//权限管理,配置主要是Realm的管理认证
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(myShiroRealm());

// 无状态subjectFactory设置
DefaultSessionStorageEvaluator evaluator = (DefaultSessionStorageEvaluator)((DefaultSubjectDAO) securityManager.getSubjectDAO()).getSessionStorageEvaluator();
evaluator.setSessionStorageEnabled(Boolean.FALSE);
StatelessWebSubjectFactory subjectFactory = new StatelessWebSubjectFactory();
securityManager.setSubjectFactory(subjectFactory);
SecurityUtils.setSecurityManager(securityManager);
return securityManager;
}

//Filter工厂,设置对应的过滤条件和跳转条件
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
Map<String, String> map = new HashMap<>();
//登出
map.put("/logout", "logout");
//对所有用户认证
map.put("/**", "authc");
//登录
shiroFilterFactoryBean.setLoginUrl("/sysUser/login");
//首页
shiroFilterFactoryBean.setSuccessUrl("/index");
//错误页面,认证不通过跳转
shiroFilterFactoryBean.setUnauthorizedUrl("/error");
shiroFilterFactoryBean.setFilterChainDefinitionMap(map);
return shiroFilterFactoryBean;
}
/**
* 开启Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP扫描使用Shiro注解的类,并在必要时进行安全逻辑验证
* 配置以下两个bean(DefaultAdvisorAutoProxyCreator(可选)和AuthorizationAttributeSourceAdvisor)即可实现此功能
*
* @return
*/
@Bean
@DependsOn({"lifecycleBeanPostProcessor"})
public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() {
DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
advisorAutoProxyCreator.setProxyTargetClass(true);
return advisorAutoProxyCreator;
}

@Bean(name="lifecycleBeanPostProcessor")
public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
return new LifecycleBeanPostProcessor();
}


//加入注解的使用,不加入这个注解不生效
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
return authorizationAttributeSourceAdvisor;
}
}

+ 23
- 0
src/main/java/com/xdf/creative/shiro/StatelessWebSubjectFactory.java View File

@@ -0,0 +1,23 @@
package com.xdf.creative.shiro;

import org.apache.shiro.subject.Subject;
import org.apache.shiro.subject.SubjectContext;
import org.apache.shiro.web.mgt.DefaultWebSubjectFactory;

/**
* 对于无状态的TOKEN不创建session 这里都不使用session
* @author tomsun28
* @date 21:52 2018/3/3
*/
public class StatelessWebSubjectFactory extends DefaultWebSubjectFactory {

@Override
public Subject createSubject(SubjectContext context) {
// 这里都不创建session
context.setSessionCreationEnabled(Boolean.FALSE);
return super.createSubject(context);
}

public StatelessWebSubjectFactory() {}

}

+ 121
- 0
src/main/java/com/xdf/creative/shiro/filter/ShiroFilterChainManager.java View File

@@ -0,0 +1,121 @@
/*
package com.xdf.creative.shiro.filter;


import com.usthe.bootshiro.service.AccountService;
import com.usthe.bootshiro.shiro.config.RestPathMatchingFilterChainResolver;
import com.usthe.bootshiro.shiro.provider.ShiroFilterRulesProvider;
import com.usthe.bootshiro.shiro.rule.RolePermRule;
import com.usthe.bootshiro.support.SpringContextHolder;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.filter.mgt.DefaultFilterChainManager;
import org.apache.shiro.web.servlet.AbstractShiroFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import javax.servlet.Filter;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

*/
/**
* Filter 管理器
* @author tomsun28
* @date 11:16 2018/2/28
*//*

@Component
public class ShiroFilterChainManager {

private static final Logger LOGGER = LoggerFactory.getLogger(ShiroFilterChainManager.class);

private final ShiroFilterRulesProvider shiroFilterRulesProvider;
private final StringRedisTemplate redisTemplate;
private final AccountService accountService;

@Value("${bootshiro.enableEncryptPassword}")
private boolean isEncryptPassword;

@Autowired
public ShiroFilterChainManager(ShiroFilterRulesProvider shiroFilterRulesProvider, StringRedisTemplate redisTemplate, AccountService accountService){
this.shiroFilterRulesProvider = shiroFilterRulesProvider;
this.redisTemplate = redisTemplate;
this.accountService = accountService;
}

*/
/**
* description 初始化获取过滤链
*
* @return java.util.Map<java.lang.String,javax.servlet.Filter>
*//*

public Map<String,Filter> initGetFilters() {
Map<String,Filter> filters = new LinkedHashMap<>();
PasswordFilter passwordFilter = new PasswordFilter();
passwordFilter.setRedisTemplate(redisTemplate);
passwordFilter.setEncryptPassword(isEncryptPassword);
filters.put("auth",passwordFilter);
BonJwtFilter jwtFilter = new BonJwtFilter();
jwtFilter.setRedisTemplate(redisTemplate);
jwtFilter.setAccountService(accountService);
filters.put("jwt",jwtFilter);
return filters;
}
*/
/**
* description 初始化获取过滤链规则
*
* @return java.util.Map<java.lang.String,java.lang.String>
*//*

public Map<String,String> initGetFilterChain() {
Map<String,String> filterChain = new LinkedHashMap<>();
// -------------anon 默认过滤器忽略的URL
List<String> defalutAnon = Arrays.asList("/css/**","/js/**");
defalutAnon.forEach(ignored -> filterChain.put(ignored,"anon"));
// -------------auth 默认需要认证过滤器的URL 走auth--PasswordFilter
List<String> defalutAuth = Arrays.asList("/account/**");
defalutAuth.forEach(auth -> filterChain.put(auth,"auth"));
// -------------dynamic 动态URL
if (shiroFilterRulesProvider != null) {
List<RolePermRule> rolePermRules = this.shiroFilterRulesProvider.loadRolePermRules();
if (null != rolePermRules) {
rolePermRules.forEach(rule -> {
StringBuilder chain = rule.toFilterChain();
if (null != chain) {
filterChain.putIfAbsent(rule.getUrl(),chain.toString());
}
});
}
}
return filterChain;
}
*/
/**
* description 动态重新加载过滤链规则
*//*

public void reloadFilterChain() {
ShiroFilterFactoryBean shiroFilterFactoryBean = SpringContextHolder.getBean(ShiroFilterFactoryBean.class);
AbstractShiroFilter abstractShiroFilter = null;
try {
abstractShiroFilter = (AbstractShiroFilter)shiroFilterFactoryBean.getObject();
RestPathMatchingFilterChainResolver filterChainResolver = (RestPathMatchingFilterChainResolver)abstractShiroFilter.getFilterChainResolver();
DefaultFilterChainManager filterChainManager = (DefaultFilterChainManager)filterChainResolver.getFilterChainManager();
filterChainManager.getFilterChains().clear();
shiroFilterFactoryBean.getFilterChainDefinitionMap().clear();
shiroFilterFactoryBean.setFilterChainDefinitionMap(this.initGetFilterChain());
shiroFilterFactoryBean.getFilterChainDefinitionMap().forEach((k,v) -> filterChainManager.createChain(k,v));
} catch (Exception e) {
LOGGER.error(e.getMessage(),e);
}
}
}
*/

+ 81
- 0
src/main/java/com/xdf/creative/shiro/jwt/JwtProperties.java View File

@@ -0,0 +1,81 @@
package com.xdf.creative.shiro.jwt;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

/**
* JWT属性配置
*
* @author DeanYe
* @date 2019-05-22
**/
@Data
@Component
@Order(-1)
@ConfigurationProperties(prefix = "spring-boot-plus.jwt")
public class JwtProperties {

/**
* token名称,默认名称为:token,可自定义
*/
private String tokenName;

/**
* 密码
*/

private String secret;

/**
* 签发人
*/
private String issuer;

/**
* 主题
*/
private String subject;

/**
* 签发的目标
*/
private String audience;

/**
* token失效时间,默认1小时,60*60=3600
*/
private Long expireSecond;

/**
* 是否刷新token,默认为true
*/
private boolean refreshToken = true;

/**
* 刷新token倒计时,默认10分钟,10*60=600
*/
private Integer refreshTokenCountdown;

/**
* redis校验jwt token是否存在
*/
private boolean redisCheck;

/**
* 单用户登陆,一个用户只能又一个有效的token
*/
private boolean singleLogin;

/**
* 是否进行盐值校验
*/
private boolean saltCheck;

/**
* 刷新tokenName
*/
private String refreshTokenName;

}

+ 91
- 0
src/main/java/com/xdf/creative/shiro/jwt/JwtToken.java View File

@@ -0,0 +1,91 @@

package com.xdf.creative.shiro.jwt;

import com.auth0.jwt.interfaces.DecodedJWT;
import com.xdf.creative.util.IpUtil;
import lombok.Data;
import lombok.experimental.Accessors;

import java.util.Date;

/**
* Shiro JwtToken对象
*
* @author DeanYe
* @date 2019-09-27
* @since 1.3.0.RELEASE
**/
@Data
@Accessors(chain = true)
public class JwtToken {

private Long userId;
/**
* 登陆ip
*/
private String host;
/**
* 登陆用户名称
*/
private String username;

/***
* 组织id
*/
private Long organizeId;

/***
* 组织类型 0 普通用户 1、园区用户 2 区文创办 3市文创办 8后台管理
*/
private Integer organizeType;

/**
* 辖区id
*/
private String regionId;

/**
* 登陆盐值
*/
private String salt;
/**
* 登陆token
*/
private String token;
/**
* 创建时间
*/
private Date createDate;
/**
* 多长时间过期,默认一小时
*/
private long expireSecond;
/**
* 过期日期
*/
private Date expireDate;

private String principal;

private String credentials;


public static JwtToken build(String token, Long userId, String username, Long organizeId, Integer organizeType, String salt, long expireSecond) {
DecodedJWT decodedJWT = JwtUtil.getJwtInfo(token);
Date createDate = decodedJWT.getIssuedAt();
Date expireDate = decodedJWT.getExpiresAt();
return new JwtToken()
.setUsername(username)
.setUserId(userId)
.setToken(token)
.setOrganizeType(organizeType)
.setOrganizeId(organizeId)
.setHost(IpUtil.getRequestIp())
.setSalt(salt)
.setCreateDate(createDate)
.setExpireSecond(expireSecond)
.setExpireDate(expireDate);

}

}

+ 77
- 0
src/main/java/com/xdf/creative/shiro/jwt/JwtTokenUtil.java View File

@@ -0,0 +1,77 @@

package com.xdf.creative.shiro.jwt;

import com.xdf.creative.util.HttpServletRequestUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
* JwtToken工具类
*
* @author DeanYe
* @date 2019-10-03
* @since 1.3.0.RELEASE
**/
@Slf4j
@Component
public class JwtTokenUtil {

private static String tokenName;

private static String refreshTokenName;

public JwtTokenUtil(JwtProperties jwtProperties) {
tokenName = jwtProperties.getTokenName();
refreshTokenName = jwtProperties.getRefreshTokenName();
log.debug("tokenName:{}", tokenName);
}

/**
* 获取token名称
*
* @return
*/
public static String getTokenName() {
return tokenName;
}

/**
* 获取refreshTokenName名称
*
* @return
*/
public static String getRefreshTokenName() {
return refreshTokenName;
}

/**
* 从请求头或者请求参数中
*
* @return
*/
public static String getToken() {
return getToken(HttpServletRequestUtil.getRequest());
}

/**
* 从请求头或者请求参数中
*
* @param request
* @return
*/
public static String getToken(HttpServletRequest request) {
if (request == null) {
throw new IllegalArgumentException("request不能为空");
}
// 从请求头中获取token
String token = request.getHeader(tokenName);
if (StringUtils.isBlank(token)) {
// 从请求参数中获取token
token = request.getParameter(tokenName);
}
return token;
}
}

+ 256
- 0
src/main/java/com/xdf/creative/shiro/jwt/JwtUtil.java View File

@@ -0,0 +1,256 @@

package com.xdf.creative.shiro.jwt;

import com.alibaba.fastjson.JSON;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.xdf.creative.constant.CommonConstant;
import com.xdf.creative.util.UUIDUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.stereotype.Component;

import java.time.Duration;
import java.util.Date;

/**
* JWT工具类
* https://github.com/auth0/java-jwt
*
* @author DeanYe
* @date 2019-09-30
* @since 1.3.0.RELEASE
**/
@Slf4j
@Component
public class JwtUtil {


private static JwtProperties jwtProperties;

public JwtUtil(JwtProperties jwtProperties) {
JwtUtil.jwtProperties = jwtProperties;
log.info(JSON.toJSONString(JwtUtil.jwtProperties));
}

/**
* 生成JWT Token
*
* @param username 用户名
* @param salt 盐值
* @param expireDuration 过期时间和单位
* @return token
*/
public static String generateToken(long userId, String username, long organizeId, Integer organizeType, String salt, Duration expireDuration) {
try {
if (StringUtils.isBlank(username)) {
log.error("username不能为空");
return null;
}
log.debug("username:{}", username);

// 如果盐值为空,则使用默认值:666666
if (StringUtils.isBlank(salt)) {
salt = jwtProperties.getSecret();
}
log.debug("salt:{}", salt);

// 过期时间,单位:秒
Long expireSecond;
// 默认过期时间为1小时
if (expireDuration == null) {
expireSecond = jwtProperties.getExpireSecond();
} else {
expireSecond = expireDuration.getSeconds();
}
log.debug("expireSecond:{}", expireSecond);
Date expireDate = DateUtils.addSeconds(new Date(), expireSecond.intValue());
log.debug("expireDate:{}", expireDate);

// 生成token
Algorithm algorithm = Algorithm.HMAC256(salt);
String token = JWT.create()
.withClaim(CommonConstant.JWT_USERNAME, username)
.withClaim(CommonConstant.JWT_USERID, userId)
.withClaim(CommonConstant.JWT_ORGANIZE, organizeId)
.withClaim(CommonConstant.JWT_ORGANIZETYPE, organizeType)
.withJWTId(UUIDUtil.getUUID()) // jwt唯一id
.withIssuer(jwtProperties.getIssuer()) // 签发人
.withSubject(jwtProperties.getSubject()) // 主题
.withAudience(jwtProperties.getAudience()) // 签发的目标
.withIssuedAt(new Date()) // 签名时间
.withExpiresAt(expireDate) // token过期时间
.sign(algorithm); // 签名
return token;
} catch (Exception e) {
log.error("generateToken exception", e);
}
return null;
}

public static boolean verifyToken(String token, String salt) {
try {
Algorithm algorithm = Algorithm.HMAC256(salt);
JWTVerifier verifier = JWT.require(algorithm)
.withIssuer(jwtProperties.getIssuer()) // 签发人
.withSubject(jwtProperties.getSubject()) // 主题
.withAudience(jwtProperties.getAudience()) // 签发的目标
.build();
DecodedJWT jwt = verifier.verify(token);
if (jwt != null) {
return true;
}
} catch (Exception e) {
log.error("Verify Token Exception", e);
}
return false;
}

/**
* 解析token,获取token数据
*
* @param token
* @return
*/
public static DecodedJWT getJwtInfo(String token) {
DecodedJWT decodedJWT = JWT.decode(token);
return decodedJWT;
}

/**
* 获取用户名
*
* @param token
* @return
*/
public static String getUsername(String token) {
if (StringUtils.isBlank(token)) {
return null;
}
DecodedJWT decodedJWT = getJwtInfo(token);
if (decodedJWT == null) {
return null;
}
String username = decodedJWT.getClaim(CommonConstant.JWT_USERNAME).asString();
return username;
}

/**
* 获取组织id
*
* @param token
* @return
*/
public static Long getOrganizeId(String token) {
if (StringUtils.isBlank(token)) {
return null;
}
DecodedJWT decodedJWT = getJwtInfo(token);
if (decodedJWT == null) {
return null;
}
Long organizeId = decodedJWT.getClaim(CommonConstant.JWT_ORGANIZE).asLong();
return organizeId;
}

/**
* 获取辖区id
*
* @param token
* @return
*/
public static String getRegionId(String token) {
if (StringUtils.isBlank(token)) {
return null;
}
DecodedJWT decodedJWT = getJwtInfo(token);
if (decodedJWT == null) {
return null;
}
String regionId = decodedJWT.getClaim(CommonConstant.JWT_REGIONID).asString();
return regionId;
}

/**
* 获取组织类型
*
* @param token
* @return
*/
public static Integer getOrganizeType(String token) {
if (StringUtils.isBlank(token)) {
return null;
}
DecodedJWT decodedJWT = getJwtInfo(token);
if (decodedJWT == null) {
return null;
}
Integer organizeType = decodedJWT.getClaim(CommonConstant.JWT_ORGANIZETYPE).asInt();
return organizeType;
}

/**
* 获取用户ID
*
* @param token
* @return
*/
public static Long getUserId(String token) {
if (StringUtils.isBlank(token)) {
return null;
}
DecodedJWT decodedJWT = getJwtInfo(token);
if (decodedJWT == null) {
return null;
}
Long userId = decodedJWT.getClaim(CommonConstant.JWT_USERID).asLong();
return userId;
}


/**
* 获取创建时间
*
* @param token
* @return
*/
public static Date getIssuedAt(String token) {
DecodedJWT decodedJWT = getJwtInfo(token);
if (decodedJWT == null) {
return null;
}
return decodedJWT.getIssuedAt();
}

/**
* 获取过期时间
*
* @param token
* @return
*/
public static Date getExpireDate(String token) {
DecodedJWT decodedJWT = getJwtInfo(token);
if (decodedJWT == null) {
return null;
}
return decodedJWT.getExpiresAt();
}

/**
* 判断token是否已过期
*
* @param token
* @return
*/
public static boolean isExpired(String token) {
Date expireDate = getExpireDate(token);
if (expireDate == null) {
return true;
}
return expireDate.before(new Date());
}

}

+ 53
- 0
src/main/java/com/xdf/creative/shiro/jwt/SaltUtil.java View File

@@ -0,0 +1,53 @@

package com.xdf.creative.shiro.jwt;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;

/**
* 盐值包装工具类
*
* @author DeanYe
* @date 2019-09-30
* @since 1.3.0.RELEASE
**/
public class SaltUtil {

/**
* 盐值包装
*
* @param secret 配置文件中配置的附加盐值
* @param salt 数据库中保存的盐值
* @return
*/
public static String getSalt(String secret, String salt) {
if (StringUtils.isBlank(secret) && StringUtils.isBlank(salt)) {
return null;
}
// 加密方法
String newSalt = DigestUtils.sha256Hex(secret + salt);
return newSalt;
}


/**
* 加工盐值
*
* @param salt
* @param jwtProperties
* @return
*/
public static String getSalt(String salt, JwtProperties jwtProperties) {
String newSalt;
if (jwtProperties.isSaltCheck()) {
// 包装盐值
newSalt = SaltUtil.getSalt(jwtProperties.getSecret(), salt);
} else {
newSalt = jwtProperties.getSecret();
}
return newSalt;
}


}


+ 21
- 0
src/main/java/com/xdf/creative/shiro/match/PasswordMatcher.java View File

@@ -0,0 +1,21 @@
package com.xdf.creative.shiro.match;

import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.credential.CredentialsMatcher;
import org.springframework.stereotype.Component;

/**
* @author tomsun28
* @date 18:00 2018/3/3
*/
@Component
public class PasswordMatcher implements CredentialsMatcher {

@Override
public boolean doCredentialsMatch(AuthenticationToken authenticationToken, AuthenticationInfo authenticationInfo) {

return authenticationToken.getPrincipal().toString().equals(authenticationInfo.getPrincipals().getPrimaryPrincipal().toString())
&& authenticationToken.getCredentials().toString().equals(authenticationInfo.getCredentials().toString());
}
}

+ 35
- 0
src/main/java/com/xdf/creative/support/auth/LoginParam.java View File

@@ -0,0 +1,35 @@

package com.xdf.creative.support.auth;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
* 登录参数
*
* @author DeanYe
* @date 2019-05-15
**/
@Data
@ApiModel("登录参数")
public class LoginParam {

@NotBlank(message = "请输入账号")
@ApiModelProperty("账号")
private String username;

@NotBlank(message = "请输入密码")
@ApiModelProperty("密码")
private String password;

@ApiModelProperty("验证码Token")
private String verifyToken;

@ApiModelProperty("验证码")
private String code;

}

+ 28
- 0
src/main/java/com/xdf/creative/support/auth/LoginSysUserTokenVo.java View File

@@ -0,0 +1,28 @@

package com.xdf.creative.support.auth;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
* @author DeanYe
* @date 2019-10-26
**/
@Data
@Accessors(chain = true)
@ApiModel("登陆用户信息TokenVO")
public class LoginSysUserTokenVo implements Serializable {
private static final long serialVersionUID = -4650803752566647697L;

@ApiModelProperty("token")
private String token;

/**
* 登陆用户对象
*/
private LoginSysUserVo loginSysUserVo;
}

+ 61
- 0
src/main/java/com/xdf/creative/support/auth/LoginSysUserVo.java View File

@@ -0,0 +1,61 @@

package com.xdf.creative.support.auth;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.Set;

/**
* <p>
* 登录用户对象,响应给前端
* </p>
*
* @author DeanYe
* @date 2019-05-15
**/
@Data
@Accessors(chain = true)
public class LoginSysUserVo implements Serializable {

private static final long serialVersionUID = -1758338570596088158L;

@ApiModelProperty(value = "主键")
private Long id;

@ApiModelProperty(value = "用户名")
private String username;

@ApiModelProperty(value = "昵称")
private String nickname;

@ApiModelProperty(value = "手机号")
private String phone;

@ApiModelProperty(value = "头像")
private String head;

@ApiModelProperty(value = "性别,0:女,1:男,默认1")
private Integer gender;

@ApiModelProperty(value = "状态,0:禁用,1:启用,2:锁定")
private Integer state;

@ApiModelProperty("组织id")
private Long organizeId;

@ApiModelProperty("角色id")
private Set<Long> roleId;

@ApiModelProperty("角色名称")
private Set<String> roleName;

@ApiModelProperty("角色编码")
private Set<String> roleCode;

@ApiModelProperty("权限编码列表")
private Set<String> permissionUrls;

}

+ 19
- 0
src/main/java/com/xdf/creative/support/exception/BusinessException.java View File

@@ -0,0 +1,19 @@
package com.xdf.creative.support.exception;

/**
* 业务异常
*
* @author DeanYe
* @date 2018-11-08
*/
public class BusinessException extends SpringBootPlusException {

public BusinessException(String message) {
super(message);
}

public BusinessException(Integer errorCode, String message) {
super(errorCode, message);
}

}

+ 21
- 0
src/main/java/com/xdf/creative/support/exception/DaoException.java View File

@@ -0,0 +1,21 @@


package com.xdf.creative.support.exception;

/**
* DAO异常
*
* @author DeanYe
* @date 2018-11-08
*/
public class DaoException extends SpringBootPlusException {

public DaoException(String message) {
super(message);
}

public DaoException(Integer errorCode, String message) {
super(errorCode, message);
}

}

+ 29
- 0
src/main/java/com/xdf/creative/support/exception/SpringBootPlusException.java View File

@@ -0,0 +1,29 @@

package com.xdf.creative.support.exception;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
* 自定义异常
*
* @author DeanYe
* @date 2018-11-08
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SpringBootPlusException extends RuntimeException {
private Integer errorCode;
private String message;

public SpringBootPlusException(String message) {
super(message);
this.message = message;
}

public SpringBootPlusException(Integer errorCode, String message) {
super(message);
this.errorCode = errorCode;
this.message = message;
}
}

+ 24
- 0
src/main/java/com/xdf/creative/support/exception/SysLoginException.java View File

@@ -0,0 +1,24 @@
package com.xdf.creative.support.exception;
import com.xdf.creative.enums.ApiCode;
/**
* 系统登录异常
*
* @author DeanYe
* @date 2019-08-04
*/
public class SysLoginException extends SpringBootPlusException {

public SysLoginException(String message) {
super(message);
}

public SysLoginException(Integer errorCode, String message) {
super(errorCode, message);
}

public SysLoginException(ApiCode apiCode) {
super(apiCode.getCode(), apiCode.getMsg());
}


}

+ 21
- 0
src/main/java/com/xdf/creative/util/HttpServletRequestUtil.java View File

@@ -0,0 +1,21 @@

package com.xdf.creative.util;

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
* 获取当前请求的HttpServletRequest对象
*
* @author DeanYe
* @date 2018-11-08
*/
public class HttpServletRequestUtil {

public static HttpServletRequest getRequest() {
HttpServletRequest httpServletRequest = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
return httpServletRequest;
}
}

+ 33
- 0
src/main/java/com/xdf/creative/util/PasswordUtil.java View File

@@ -0,0 +1,33 @@

package com.xdf.creative.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;

/**
* 密码加密工具类
*
* @author DeanYe
* @date 2018-11-08
*/
@Slf4j
public class PasswordUtil {
private static final String KEY = "f80b2eed0110a7ea5a94c35cbea1fe003d9bb450803473428b74862cceb697f8";

public static String encrypt(String pwd, String salt) {
if (StringUtils.isBlank(pwd)) {
return null;
}
return DigestUtils.sha256Hex(pwd + salt);
}


public static void main(String[] args) {
String pss = encrypt("123456", "99952b31c18156169a26bec80fd211f6");

System.out.println("----------:" + pss);
}


}

+ 17
- 0
src/main/java/com/xdf/creative/util/UUIDUtil.java View File

@@ -0,0 +1,17 @@

package com.xdf.creative.util;

import java.util.UUID;

/**
* @author DeanYe
* @date 2018-11-08
*/
public class UUIDUtil {

public static String getUUID() {
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
return uuid;
}

}

+ 28
- 0
src/main/java/com/xdf/creative/util/convert/SysPermissionConvert.java View File

@@ -0,0 +1,28 @@

package com.xdf.creative.util.convert;

import com.xdf.creative.base.vo.creative.SysPermissionTreeVo;
import com.xdf.creative.module.entity.SysPermission;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

/**
* SysPermission类相关转换
*
* @author DeanYe
* @date 2019-10-26
**/
@Mapper
public interface SysPermissionConvert {

SysPermissionConvert INSTANCE = Mappers.getMapper(SysPermissionConvert.class);

/**
* SysPermission对象转换成SysPermissionTreeVo对象
*
* @param sysPermission
* @return
*/
SysPermissionTreeVo permissionToTreeVo(SysPermission sysPermission);

}

+ 27
- 0
src/main/java/com/xdf/creative/util/convert/SysRoleConvert.java View File

@@ -0,0 +1,27 @@

package com.xdf.creative.util.convert;

import com.xdf.creative.base.params.creative.AddSysRoleParam;
import com.xdf.creative.module.entity.SysRole;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

/**
* 系统角色转换器
*
* @author DeanYe
* @date 2019-10-05
**/
@Mapper
public interface SysRoleConvert {

SysRoleConvert INSTANCE = Mappers.getMapper(SysRoleConvert.class);

/**
* AddSysRoleParam转SysRole
*
* @param addSysRoleParam
* @return
*/
SysRole addSysRoleParamToSysRole(AddSysRoleParam addSysRoleParam);
}

+ 33
- 0
src/main/java/com/xdf/creative/util/convert/SysUserConvert.java View File

@@ -0,0 +1,33 @@

package com.xdf.creative.util.convert;

import com.xdf.creative.base.params.creative.SysUserQueryParam;
import com.xdf.creative.base.vo.creative.SysUserQueryVo;
import com.xdf.creative.module.entity.SysUser;
import com.xdf.creative.support.auth.LoginSysUserVo;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

/**
* @author DeanYe
* @date 2019-10-05
**/
@Mapper
public interface SysUserConvert {

SysUserConvert INSTANCE = Mappers.getMapper(SysUserConvert.class);

/**
* 系统用户实体对象转换成登陆用户VO对象
*
* @param sysUser
* @return
*/
LoginSysUserVo sysUserToLoginSysUserVo(SysUser sysUser);

SysUserQueryVo sysUserToSysUserQueryVo(SysUser sysUser);

SysUser sysUserQueryParamToSysUser(SysUserQueryParam sysUserQueryParam);


}

+ 102
- 0
src/main/java/com/xdf/creative/util/tree/TreeConfig.java View File

@@ -0,0 +1,102 @@
package com.xdf.creative.util.tree;

import org.apache.commons.lang.StringUtils;

/**
* 构建树时,需要对树的构成进行配置
*
* @author chen
* @Date 2011-4-21
*/
public class TreeConfig {
/**
* 主键字段
*/
String idField;
/**
* 父节点字段
*/
String parentField;
/**
* 根节点字段
*/
String rootField;
/**
* 根节点值
*/
String rootValue;
/**
* 叶节点字段,如果为空,对节点是否为叶子节点将由每个节点是否有子节点来判定
*/
String leafField;

public TreeConfig() {
}

public TreeConfig(String idField, String parentField, String rootField, String rootValue, String leafField) {
this.idField = idField;
this.parentField = parentField;
this.rootField = rootField;
this.rootValue = rootValue;
this.leafField = leafField;
}

/**
* 如果配置参数不完全,将返回false
*
* @return
* @author chen
* @Date 2011-4-21
*/
public boolean isNull() {
//当leafField为空时,将要把是否有子节点来判定是否是叶子节点
if (/*StringUtils.isBlank(this.displayField) || */StringUtils.isBlank(this.parentField)
|| StringUtils.isBlank(this.rootField) || StringUtils.isBlank(this.rootValue)
|| StringUtils.isBlank(this.idField))
return true;
/*//如果设置显示叶子节点,但并没有设置节点字段,将返回为空
else if(this.getShowLeaf() && StringUtils.isBlank(this.getLeafField()))
return true;*/
return false;
}

public String getIdField() {
return idField;
}

public void setIdField(String idField) {
this.idField = idField;
}

public String getRootField() {
return rootField;
}

public void setRootField(String rootField) {
this.rootField = rootField;
}

public String getParentField() {
return parentField;
}

public void setParentField(String parentField) {
this.parentField = parentField;
}

public String getRootValue() {
return rootValue;
}

public void setRootValue(String returnValue) {
this.rootValue = returnValue;
}

public String getLeafField() {
return leafField;
}

public void setLeafField(String leafField) {
this.leafField = leafField;
}
}

+ 227
- 0
src/main/java/com/xdf/creative/util/tree/Utils.java View File

@@ -0,0 +1,227 @@
package com.xdf.creative.util.tree;

import org.apache.commons.lang.StringUtils;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;


/**
* 系统工具类
*
* @author chen
* @Date 2011-1-26
*/
@SuppressWarnings("unchecked")
public class Utils {

/**
* 将list集合转换为TreePanel所使用的数据,并返回
*
* @param list list集合
* @param config TreeNode的配置信息
* @return
*/
public static List tree(List<Object> list, TreeConfig config) {
List results = new ArrayList();
if (Utils.isNotEmpty(list) && !config.isNull()) {
for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);
if (null != obj
&& getFieldValue(obj, config.getRootField()).equals(
config.getRootValue())) {
obj = parse(list, obj, config);
if (null != obj)
results.add(obj);
}
if (i == list.size() - 1)
return results;
}
}
return results;
}

/**
* 供 @see #tree(List, TreeConfig)方法递归出TreeNode
*
* @param list list集合
* @param current 当前节点
* @param config TreeNode配置信息
* @return
*/
@SuppressWarnings("rawtypes")
public static Object parse(List<Object> list, Object current,
TreeConfig config) {
for (Object obj : list) {

if (null != obj
&& getFieldValue(obj, config.getParentField()).equals(
getFieldValue(current, config.getIdField()))) {

if (null != obj) {
List children = (List) getFieldValue(current, "children");
Object child = parse(list, obj, config);
children.add(child);
}
}
}

if (Utils.isNotEmpty(((List) getFieldValue(current, "children")))) {
setFieldValue(current, "leaf", false);
} else {
setFieldValue(current, "leaf", true);
}

return current;
}


/**
* 验证集合是否为空,包括是否为null或者集合长度为0
*
* @param obj
* @return
* @author chen
* @Date 2011-4-19
*/
public static boolean isNotEmpty(Object obj) {
if (null == obj)
return false;
else {
if (obj instanceof Collection) {
if (((Collection) obj).size() < 1)
return false;
} else if (obj instanceof Map) {
if (((Map) obj).size() < 1)
return false;
} else {
String className = obj.getClass().getName();

if (className.indexOf(".") != -1)
if (((Object[]) obj).length < 1)
return false;

if (className.length() == 2 && className.startsWith("[")) {
String type = className.substring(1);
if (type.equals("I")) {
if (((int[]) obj).length < 1)
return false;
} else if (type.equals("D")) {
if (((double[]) obj).length < 1)
return false;
} else if (type.equals("F")) {
if (((float[]) obj).length < 1)
return false;
} else if (type.equals("B")) {
if (((byte[]) obj).length < 1)
return false;
} else if (type.equals("C")) {
if (((char[]) obj).length < 1)
return false;
} else if (type.equals("S")) {
if (((short[]) obj).length < 1)
return false;
} else if (type.equals("L")) {
if (((long[]) obj).length < 1)
return false;
} else if (type.equals("Z")) {
if (((boolean[]) obj).length < 1)
return false;
}
}
}

return true;
}
}


/**
* 得到对象的指定字段值
*
* @param obj
* @param fieldName 字段名
* @return
* @author chen
* @Date 2011-1-26
*/
public static Object getFieldValue(Object obj, String fieldName) {
if (null == obj || !StringUtils.isNotEmpty(fieldName))
return null;
// 得到对象的所有定义的方法
Method[] methods = obj.getClass().getDeclaredMethods();

for (Method method : methods) {
// 得到对象的getter方法
if (method.getName().toLowerCase()
.equals(("get" + fieldName).toLowerCase()))
try {
// 调用getter方法获得字段值
return method.invoke(obj, null);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return null;
}
}
return null;
}


/**
* 设置对象指定的字段值
*
* @param obj 需要设置值的对象
* @param fieldName 字段名
* @param fieldValue 字段值
* @author chen
* @Date 2011-3-10
*/
public static void setFieldValue(Object obj, String fieldName,
Object fieldValue) {
if (null == obj || !StringUtils.isNotEmpty(fieldName))
return;
// 得到对象的所有定义的方法
Method[] methods = obj.getClass().getMethods();

for (Method method : methods) {
// 得到对象的getter方法
if (method.getName().toLowerCase()
.equals(("set" + fieldName).toLowerCase()))
try {
// 调用setter方法设置字段值
method.invoke(obj, fieldValue);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}


}

+ 23
- 1
src/main/resources/application.yml View File

@@ -70,7 +70,29 @@ spring:
validation-query-timeout: 60000



############################ JWT start #############################
jwt:
# token请求头名称
token-name: token
# jwt密钥线上需要修改secret
secret: f80b2eed0110a7ea5a94c35cbea1fe003d9bb450803473428b74862cceb697f8
# 发行人
issuer: xdf
# 观众
audience: web
# 默认过期时间1小时,单位:秒
expire-second: 3600
# 是否刷新token
refresh-token: true
# 刷新token的时间间隔,默认10分钟,单位:秒
refresh-token-countdown: 600
# redis校验jwt token是否存在,可选
redis-check: true
# true: 同一个账号只能是最后一次登陆token有效,false:同一个账号可多次登陆
single-login: true
# 盐值校验,如果不加自定义盐值,则使用secret校验
salt-check: true
############################ JWT end ###############################

############################### mybatis-plus start #################################
mybatis-plus:

+ 91
- 0
src/main/resources/mapper/SysOrganizeMapper.xml View File

@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xdf.creative.module.mapper.SysOrganizeMapper">


<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, organize_name,popedom_id,organize_type,system_create,state,
update_time, create_time, parent_id
</sql>

<sql id="Base_Bus_Column_List">
${alias}.id, ${alias}.organize_name,
${alias}.popedom_id,, ${alias}.organize_type, ${alias}.system_create, ${alias}.state,
${alias}.update_time, ${alias}.create_time, ${alias}.parent_id
</sql>


<sql id="Base_If_Condition">
<where>
<if test="param.id !=null and param.id!=''">
and id=#{param.id}
</if>
<if test="param.organizeName !=null and param.organizeName!=''">
and organize_name=#{param.organizeName}
</if>
<if test="param.popedomId !=null and param.popedomId!=''">
and popedom_id=#{param.popedomId}
</if>

<if test="param.organizeType !=null and param.organizeType!=''">
and organize_type=#{param.organizeType}
</if>
<if test="param.systemCeate !=null and param.systemCeate!=''">
and system_create=#{param.systemCeate}
</if>
<if test="param.state !=null and param.state!=''">
and state=#{param.state}
</if>

<if test="param.updateTime !=null and param.updateTime!=''">
and update_time=#{param.updateTime}
</if>
<if test="param.createTime !=null and param.createTime!=''">
and create_time=#{param.createTime}
</if>
<if test="param.parentId !=null and param.parentId!=''">
and parent_id=#{param.parentId}
</if>
</where>
</sql>


<!--根据ID查询-->
<select id="getSysOrganizeById" resultType="com.xdf.creative.base.vo.creative.SysOrganizeQueryVo">
select
<include refid="Base_Column_List"/>
from sys_organize where id = #{id}
</select>

<!--根据用户ID查询-->
<select id="getSysOrganizeByUserId" resultType="com.xdf.creative.base.vo.creative.SysOrganizeQueryVo">
select
<include refid="Base_Bus_Column_List">
<property name="alias" value="a"/>
</include>
from sys_organize a left join web_user b on a.id = b.organize_id where b.id = #{id}
</select>

<!--分页查询-->
<select id="getSysOrganizePageList"
resultType="com.xdf.creative.base.vo.creative.SysOrganizeQueryVo"
parameterType="com.xdf.creative.base.params.creative.SysOrganizeQueryParam">
select
<include refid="Base_Column_List"/>
from sys_organize
<include refid="Base_If_Condition"/>
</select>

<select id="isEnableSysOrganize" parameterType="com.xdf.creative.base.params.creative.IsEnableSysOrganizeParam"
resultType="java.lang.Integer">
select count(1)
from sys_organize so
inner join sys_user su
on so.parent_id = su.organize_id
where su.id=#{userId}
and so.id=#{orgId}
and so.state = 1
</select>

</mapper>

+ 115
- 0
src/main/resources/mapper/SysPermissionMapper.xml View File

@@ -0,0 +1,115 @@
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xdf.creative.module.mapper.SysPermissionMapper">

<!-- 通用查询结果列 -->
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, name, resource_id, parent_resource_id, url, code, icon, type, level, state, sort, remark, deleted, version,
create_time, update_time
</sql>

<select id="getSysPermissionById" resultType="com.xdf.creative.base.vo.creative.SysPermissionQueryVo">
select
<include refid="Base_Column_List"/>
from sys_permission where resource_id = #{resourceId}
</select>

<select id="getSysPermissionPageList" resultType="com.xdf.creative.base.vo.creative.SysPermissionQueryVo">
select
<include refid="Base_Column_List"/>
from sys_permission
</select>


<select id="getMenuListByUserId" resultType="com.xdf.creative.module.entity.SysPermission">
select sp.*
from sys_user u
inner join sys_user_role sur
on u.id = sur.user_id
inner join sys_role sr
on sur.role_id = sr.id
inner join sys_role_permission srp
on sr.id=srp.role_id
inner join sys_permission sp
on srp.permission_id = sp.resource_id
where u.state = 1
and u.deleted = 0
and sr.state = 1
and sp.state = 1
and u.id = #{userId}
</select>


<select id="getPermissionUrlByUserId" resultType="java.lang.String" parameterType="java.lang.Long">
select url from sys_permission where parent_resource_id in (
select sp.resource_id
from sys_user u
inner join sys_user_role sur
on u.id = sur.user_id
inner join sys_role sr
on sur.role_id = sr.id
inner join sys_role_permission srp
on sr.id = srp.role_id
inner join sys_permission sp
on srp.permission_id = sp.resource_id

where u.id = #{userId}
and u.state = 1
and u.deleted = 0
and sr.state = 1
and sr.deleted = 0
and sp.state = 1
and sp.deleted = 0
) and state = 1
and deleted = 0
and type = 2
</select>


<select id="getMenusByUserId" resultType="com.xdf.creative.module.entity.SysPermission" parameterType="java.lang.Long">
select
sp.id, sp.name, sp.resource_id, sp.parent_resource_id, sp.url, sp.code, sp.icon, sp.type, sp.level, sp.state,
sp.sort, sp.remark, sp.deleted, sp.version, sp.create_time, sp.update_time
from sys_user_role sur
inner join sys_role sr
on sur.role_id = sr.id
inner join sys_role_permission srp
on sr.id = srp.role_id
inner join sys_permission sp
on srp.permission_id = sp.resource_id

where sur.id = #{userId}
and sr.state = 1
and sr.deleted = 0
and sp.state = 1
and sp.deleted = 0
and sp.type =1
</select>


<!--角色授权资源列表查询-->
<select id="impowerResourceTreeList" parameterType="java.lang.Long"
resultType="com.xdf.creative.module.entity.SysPermission">
select a.*,case when b.state =1 then 'true' else 'false' end as checked from sys_permission a
left join (select distinct permission_id,state from sys_role_permission where role_id in (select role_id from
sys_user_role where user_id = #{userId}))b
on a.resource_id =b.permission_id where a.state = 1 and a.deleted = 0 and a.code <![CDATA[ <> ]]> "0"
</select>


<!--用户登录加载左侧资源树 屏蔽按钮-->
<select id="currentUserResourceTreeList" parameterType="java.lang.Long"
resultType="com.xdf.creative.module.entity.SysPermission">
select a.* from sys_permission a right join (select * from sys_role_permission where role_id in (select role_id
from sys_user_role
where user_id = 1))b on a.resource_id =b.permission_id where a.state = 1 and a.deleted = 0 and a.type =1
</select>

<!-- 获取不需要鉴权的url -->
<select id="getSkipAuthUrls" resultType="java.lang.String">
select url from sys_permission where type = 2 and (code = 0 or code = 3);
</select>

</mapper>

+ 32
- 0
src/main/resources/mapper/SysRoleMapper.xml View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xdf.creative.module.mapper.SysRoleMapper">

<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, name, code, type, state, remark, version, create_time, update_time
</sql>

<select id="getSysRoleById" resultType="com.xdf.creative.base.vo.creative.SysRoleQueryVo">
select
<include refid="Base_Column_List"/>
from sys_role where id = #{id}
</select>

<select id="getSysRolePageList" resultType="com.xdf.creative.base.vo.creative.SysRoleQueryVo">
select
<include refid="Base_Column_List"/>
from sys_role
</select>

<select id="getUserRoleByUserId" resultType="com.xdf.creative.base.vo.creative.SysRoleQueryVo" parameterType="java.lang.Long">
select
sr.*
from sys_role sr
inner join sys_user_role sur
on sr.id = sur.role_id
where sur.user_id=#{userId}
</select>

</mapper>

+ 37
- 0
src/main/resources/mapper/SysRolePermissionMapper.xml View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xdf.creative.module.mapper.SysRolePermissionMapper">

<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, role_id, permission_id, state, remark, version, create_time, update_time
</sql>

<select id="getSysRolePermissionById" resultType="com.xdf.creative.base.vo.creative.SysRolePermissionQueryVo">
select
<include refid="Base_Column_List"/>
from sys_role_permission where id = #{id}
</select>

<select id="getSysRolePermissionPageList"
resultType="com.xdf.creative.base.vo.creative.SysRolePermissionQueryVo">
select
<include refid="Base_Column_List"/>
from sys_role_permission
</select>

<select id="getPermissionCodesByRoleId" resultType="java.lang.String">
select p.code
from sys_role r
inner join sys_role_permission rp
on r.id = rp.role_id
inner join sys_permission p
on rp.permission_id = p.id
where r.state = 1
and rp.state = 1
and p.state = 1
and r.id = #{roleId};
</select>

</mapper>

+ 32
- 0
src/main/resources/mapper/SysUserMapper.xml View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xdf.creative.module.mapper.SysUserMapper">

<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, username, nickname, password, salt, phone, email, state,
gender, head, user_type, organize_id, deleted, version, remark, create_time, update_time
</sql>

<select id="getSysUserById" resultType="com.xdf.creative.base.vo.creative.SysUserQueryVo">
select
<include refid="Base_Column_List"/>
from sys_user
where deleted = 0 and id = #{id}
</select>

<select id="getSysUserPageList" resultType="com.xdf.creative.base.vo.creative.SysUserQueryVo">
select
<include refid="Base_Column_List"/>
from sys_user
where deleted = 0
</select>

<select id="getSysUserByUserName" resultType="com.xdf.creative.module.entity.SysUser" parameterType="java.lang.String">
SELECT
<include refid="Base_Column_List"/>
FROM sys_user
WHERE username=#{username}
</select>
</mapper>

+ 46
- 0
src/main/resources/mapper/SysUserRoleMapper.xml View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xdf.creative.module.mapper.SysUserRoleMapper">


<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, user_id, role_id, create_time
</sql>

<sql id="Base_If_Condition">
<where>
<if test="ew.id !=null and ew.id!=''">
and id=id
</if>
<if test="ew.userId !=null and ew.userId!=''">
and user_id=userId
</if>
<if test="ew.roleId !=null and ew.roleId!=''">
and role_id=roleId
</if>
<if test="ew.createTime !=null and ew.createTime!=''">
and create_time=createTime
</if>
</where>
</sql>


<!--根据ID查询-->
<select id="getSysUserRoleById" resultType="com.xdf.creative.base.vo.creative.SysUserRoleQueryVo">
select
<include refid="Base_Column_List"/>
from sys_user_role where id = #{id}
</select>

<!--分页查询-->
<select id="getSysUserRolePageList"
resultType="com.xdf.creative.base.vo.creative.SysUserRoleQueryVo"
parameterType="com.xdf.creative.base.params.creative.SysUserRoleQueryParam">
select
<include refid="Base_Column_List"/>
from sys_user_role
<include refid="Base_If_Condition"/>
</select>

</mapper>

Loading…
Cancel
Save