diff --git a/pom.xml b/pom.xml index baea5dc..aaad86e 100644 --- a/pom.xml +++ b/pom.xml @@ -38,8 +38,15 @@ 5.1.46 1.1.16 2.8.0 + + 2.8.0 + + + 2.0.0 - 1.18.8 + + + 1.18.2 2.1.5.RELEASE 3.7 1.2.54 @@ -48,6 +55,7 @@ 0.10.5 0.10.5 1.3.0.Final + @@ -65,12 +73,6 @@ hutool-all 4.5.13 - - - - - - commons-codec commons-codec @@ -113,31 +115,11 @@ commons-io ${commons-io.version} - - - - - - - - - - mysql mysql-connector-java ${mysql.version} - - - - - - - - - - com.alibaba druid-spring-boot-starter @@ -148,6 +130,10 @@ springfox-swagger2 ${swagger2.version} + + org.mapstruct + mapstruct-jdk8 + org.mapstruct mapstruct @@ -157,8 +143,12 @@ io.springfox springfox-swagger-ui - ${swagger2.version} + ${swagger-ui.version} + + org.mapstruct + mapstruct-jdk8 + org.mapstruct mapstruct @@ -209,12 +199,12 @@ org.springframework.boot spring-boot-starter-web ${springboot.version} - - - - - - + + + + + + @@ -247,7 +237,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.5.1 + 3.6.0 1.8 1.8 @@ -262,11 +252,11 @@ lombok ${lombok.version} - - - - + + + + diff --git a/src/main/java/net/alawn/bill/annotation/Query.java b/src/main/java/net/alawn/bill/annotation/Query.java index caa3492..dbae799 100644 --- a/src/main/java/net/alawn/bill/annotation/Query.java +++ b/src/main/java/net/alawn/bill/annotation/Query.java @@ -13,9 +13,9 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) public @interface Query { - /** Dong ZhaoYang 2017/8/7 基本对象的属性名 */ + /** 基本对象的属性名 */ String propName() default ""; - /** Dong ZhaoYang 2017/8/7 查询方式 */ + /** 查询方式 */ Type type() default Type.EQUAL; /** @@ -32,17 +32,17 @@ public @interface Query { enum Type { EQUAL - /** Dong ZhaoYang 2017/8/7 大于等于 */ + /** 大于等于 */ , GREATER_THAN - /** Dong ZhaoYang 2017/8/7 小于等于 */ + /** 小于等于 */ , LESS_THAN - /** Dong ZhaoYang 2017/8/7 中模糊查询 */ + /** 中模糊查询 */ , INNER_LIKE - /** Dong ZhaoYang 2017/8/7 左模糊查询 */ + /** 左模糊查询 */ , LEFT_LIKE - /** Dong ZhaoYang 2017/8/7 右模糊查询 */ + /** 右模糊查询 */ , RIGHT_LIKE - /** Dong ZhaoYang 2017/8/7 小于 */ + /** 小于 */ , LESS_THAN_NQ //** jie 2019/6/4 包含 */ , IN diff --git a/src/main/java/net/alawn/bill/config/SwaggerConfig.java b/src/main/java/net/alawn/bill/config/SwaggerConfig.java index 862e7f2..cc49c52 100644 --- a/src/main/java/net/alawn/bill/config/SwaggerConfig.java +++ b/src/main/java/net/alawn/bill/config/SwaggerConfig.java @@ -17,7 +17,7 @@ import static com.google.common.collect.Lists.newArrayList; * @author Alawn */ @Configuration -//@EnableSwagger2 +@EnableSwagger2 public class SwaggerConfig { @Bean public Docket createRestApi() { diff --git a/src/main/java/net/alawn/bill/config/WebSecurityConfig.java b/src/main/java/net/alawn/bill/config/WebSecurityConfig.java index 49f109a..cc4cb55 100644 --- a/src/main/java/net/alawn/bill/config/WebSecurityConfig.java +++ b/src/main/java/net/alawn/bill/config/WebSecurityConfig.java @@ -103,6 +103,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { .antMatchers( HttpMethod.GET, "/","/*.html", "/favicon.ico", "/**/*.html", "/**/*.css", "/**/*.js").permitAll() // .antMatchers("/resources/**").permitAll() .antMatchers(HttpMethod.POST,"/api/users").permitAll() + .antMatchers(HttpMethod.POST,"/api/users/vendors").permitAll() .antMatchers("/auth/**").permitAll() .antMatchers("/api/**").authenticated() // .antMatchers("/basic/**/*").authenticated() diff --git a/src/main/java/net/alawn/bill/constant/AuthorityConstants.java b/src/main/java/net/alawn/bill/constant/AuthorityConstants.java new file mode 100644 index 0000000..41d3e2d --- /dev/null +++ b/src/main/java/net/alawn/bill/constant/AuthorityConstants.java @@ -0,0 +1,39 @@ +package net.alawn.bill.constant; + +/** + * @Author: Alawn + * @Description: + * @Date: Create in 14:04 2019-06-29 + */ +public class AuthorityConstants { + public final static String ADMIN = "admin" ; + public final static String PERMISSION_ALL = "permission:all" ; + public final static String PERMISSION_CREATE = "permission:create" ; + public final static String PERMISSION_UPDATE = "permission:update" ; + public final static String PERMISSION_SELECT = "permission:select" ; + public final static String PERMISSION_DELETE = "permission:delete" ; + public final static String USER_ALL = "user:all" ; + public final static String USER_CREATE = "user:create" ; + public final static String USER_UPDATE = "user:update" ; + public final static String USER_DELETE = "user:delete" ; + public final static String ROLE_ALL = "role:all" ; + public final static String ROLE_CREATE = "role:create" ; + public final static String ROLE_UPDATE = "role:update" ; + public final static String ROLE_DELETE = "role:delete" ; + public final static String BOOK_ALL = "book:all" ; + public final static String BOOK_CREATE = "book:create" ; + public final static String BOOK_UPDATE = "book:update" ; + public final static String BOOK_DELETE = "book:delete" ; + public final static String POST_ALL = "post:all" ; + public final static String POST_CREATE = "post:create" ; + public final static String POST_UPDATE = "post:update" ; + public final static String POST_DELETE = "post:delete" ; + public final static String TITLE_ALL = "title:all" ; + public final static String TITLE_CREATE = "title:create" ; + public final static String TITLE_UPDATE = "title:update" ; + public final static String TITLE_DELETE = "title:delete" ; + public final static String MERCHANT_ALL = "merchant:all" ; + public final static String MERCHANT_CREATE = "merchant:create" ; + public final static String MERCHANT_UPDATE = "merchant:update" ; + public final static String MERCHANT_DELETE = "merchant:delete" ; +} diff --git a/src/main/java/net/alawn/bill/constant/RoleConstants.java b/src/main/java/net/alawn/bill/constant/RoleConstants.java new file mode 100644 index 0000000..e803f5f --- /dev/null +++ b/src/main/java/net/alawn/bill/constant/RoleConstants.java @@ -0,0 +1,13 @@ +package net.alawn.bill.constant; + +/** + * @Author: Alawn + * @Description: + * @Date: Create in 14:04 2019-06-29 + */ +public class RoleConstants { + public final static String ADMIN = "admin" ; + public final static String VENDOR = "vendor" ; + public final static String CUSTOMER = "customer" ; + public final static String DEFAULT = CUSTOMER ; +} diff --git a/src/main/java/net/alawn/bill/controller/BillController.java b/src/main/java/net/alawn/bill/controller/BillController.java index fe2108a..5096bd9 100644 --- a/src/main/java/net/alawn/bill/controller/BillController.java +++ b/src/main/java/net/alawn/bill/controller/BillController.java @@ -9,6 +9,7 @@ import net.alawn.bill.repository.BookRepo; import net.alawn.bill.repository.ItemRepo; import net.alawn.bill.security.JwtUser; import net.alawn.bill.service.dto.NewBill; +import net.alawn.bill.util.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -87,12 +88,25 @@ public class BillController { @RequestMapping(value = "/bill/books",method = RequestMethod.GET) public ResponseEntity> fetchBooks(){ -// public ResponseEntity> fetchBooks(){ - JwtUser jwtUser = (JwtUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + JwtUser jwtUser = (JwtUser) SecurityUtils.getUserDetails(); long userId = jwtUser.getId(); - String userName = jwtUser.getUsername(); +// for(Object authoritie :jwtUser.getAuthorities()) { +// log.info("authoritie:" + authoritie); +// } + +// for(Object role:jwtUser.getRoles()) { +// log.info("role:" + role); +// } +// jwtUser.getRoles().contains(); + +// if (jwtUser.getAuthorities().contains("admin")) +// { +// jwtUser.getRoles().contains(""); +// +// } + Page books = null; // List books = bookRepo.findByUserIdOrderByCreateTimeDesc(userId); diff --git a/src/main/java/net/alawn/bill/controller/MerchantController.java b/src/main/java/net/alawn/bill/controller/MerchantController.java index 8173ad4..1fa45ac 100644 --- a/src/main/java/net/alawn/bill/controller/MerchantController.java +++ b/src/main/java/net/alawn/bill/controller/MerchantController.java @@ -6,6 +6,7 @@ import net.alawn.bill.repository.MerchantRepo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -27,12 +28,14 @@ public class MerchantController { @RequestMapping(value = "/merchants",method = RequestMethod.POST) @ResponseBody - public ResponseEntity addMerchant(@RequestBody Merchant resources) { + @PreAuthorize("hasAnyAuthority('admin','merchant:all','merchant:create','book:create','book:create')") + public ResponseEntity create(@RequestBody Merchant resources) { return new ResponseEntity(merchantRepo.saveAndFlush(resources), HttpStatus.CREATED); } @RequestMapping(value = "/merchants",method = RequestMethod.GET) @ResponseBody + @PreAuthorize("hasAnyAuthority('admin','merchant:all','merchant:select','book:create','book:update')") public ResponseEntity> fetchMerchants() { return ResponseEntity.ok(merchantRepo.findAllByEnabledIsTrue()); } @@ -40,6 +43,7 @@ public class MerchantController { @RequestMapping(value = "/merchants/{id}",method = RequestMethod.GET) @ResponseBody + @PreAuthorize("hasAnyAuthority('admin','merchant:all','merchant:select')") public ResponseEntity getMerchant(@PathVariable long id){ Optional merchant = merchantRepo.findById(id); if(merchant.isPresent()){ diff --git a/src/main/java/net/alawn/bill/controller/PermissionController.java b/src/main/java/net/alawn/bill/controller/PermissionController.java index aef9e11..293b7fc 100644 --- a/src/main/java/net/alawn/bill/controller/PermissionController.java +++ b/src/main/java/net/alawn/bill/controller/PermissionController.java @@ -34,16 +34,14 @@ public class PermissionController { * @return */ @GetMapping(value = "/permissions/tree") -// @PreAuthorize("hasAnyRole('admin','permission:all','permission:create','permission:edit','roles:select','roles:all')") - @PreAuthorize("hasAnyAuthority('admin','permission:all')") + @PreAuthorize("hasAnyAuthority('admin','permission:all','permission:select')") public ResponseEntity getTree(){ return new ResponseEntity(permissionService.getPermissionTree(permissionService.findByPid(0L)), HttpStatus.OK); } // @Log("查询权限") @GetMapping(value = "/permissions") -// @PreAuthorize("hasAnyRole('admin','permission:all','permission:select')") - @PreAuthorize("hasAnyAuthority('admin','permission:all')") + @PreAuthorize("hasAnyAuthority('admin','permission:all','permission:select')") public ResponseEntity getPermissions(CommonQueryCriteria criteria){ List permissionDTOS = permissionService.queryAll(criteria); Object obj = permissionService.buildTree(permissionDTOS); @@ -54,7 +52,8 @@ public class PermissionController { // @Log("新增权限") @PostMapping(value = "/permissions") - @PreAuthorize("hasAnyRole('admin','permission:all','permission:create')") + @PreAuthorize("hasAnyAuthority('admin','permission:all','permission:create')") +// @PreAuthorize("hasAnyAuthority('admin','permission:all','permission:create')") public ResponseEntity create(@Validated @RequestBody Permission resources){ if (resources.getId() != null) { throw new BadRequestException("A new "+ ENTITY_NAME +" cannot already have an ID"); @@ -64,7 +63,7 @@ public class PermissionController { // @Log("修改权限") @PutMapping(value = "/permissions") - @PreAuthorize("hasAnyRole('admin','permission:all','permission:edit')") + @PreAuthorize("hasAnyAuthority('admin','permission:all','permission:update')") public ResponseEntity update(@Validated(Permission.Update.class) @RequestBody Permission resources){ permissionService.update(resources); return new ResponseEntity(HttpStatus.NO_CONTENT); @@ -72,7 +71,7 @@ public class PermissionController { // @Log("删除权限") @DeleteMapping(value = "/permissions/{id}") - @PreAuthorize("hasAnyRole('admin','permission:all','permission:delete')") + @PreAuthorize("hasAnyAuthority('admin','permission:all','permission:delete')") public ResponseEntity delete(@PathVariable Long id){ permissionService.delete(id); return new ResponseEntity(HttpStatus.OK); diff --git a/src/main/java/net/alawn/bill/controller/PostController.java b/src/main/java/net/alawn/bill/controller/PostController.java index 68cf5c4..17dd1e8 100644 --- a/src/main/java/net/alawn/bill/controller/PostController.java +++ b/src/main/java/net/alawn/bill/controller/PostController.java @@ -7,6 +7,7 @@ import net.alawn.bill.util.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -27,6 +28,7 @@ public class PostController { @RequestMapping(value = "/posts",method = RequestMethod.POST) @ResponseBody + @PreAuthorize("hasAnyAuthority('admin','post:all','post:create','book:create','book:edit')") public ResponseEntity create(@RequestBody Post post) { // public ResponseEntity create(@RequestBody NewPost newPost) { // JwtUser authUser = (JwtUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); @@ -42,7 +44,8 @@ public class PostController { @RequestMapping(value = "/posts",method = RequestMethod.GET) @ResponseBody - public ResponseEntity> fetchPosts() { + @PreAuthorize("hasAnyAuthority('admin','post:all','post:select','book:create','book:edit')") + public ResponseEntity> fetch() { // JwtUser authUser = (JwtUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); // long userId = authUser.getId(); List posts = postRepo.findByUserId(SecurityUtils.getUserId()); @@ -51,7 +54,8 @@ public class PostController { @RequestMapping(value = "/posts/{id}",method = RequestMethod.GET) @ResponseBody - public ResponseEntity getPost(@PathVariable long id){ + @PreAuthorize("hasAnyAuthority('admin','post:all','post:select')") + public ResponseEntity get(@PathVariable long id){ log.info("post id:" + id); /** 登记 Post */ diff --git a/src/main/java/net/alawn/bill/controller/RoleController.java b/src/main/java/net/alawn/bill/controller/RoleController.java new file mode 100644 index 0000000..2f60250 --- /dev/null +++ b/src/main/java/net/alawn/bill/controller/RoleController.java @@ -0,0 +1,113 @@ +package net.alawn.bill.controller; + +import cn.hutool.core.lang.Dict; +import net.alawn.bill.entity.po.Role; +import net.alawn.bill.exception.BadRequestException; +import net.alawn.bill.service.RoleService; +import net.alawn.bill.service.dto.CommonQueryCriteria; +import net.alawn.bill.service.dto.RoleSmallDTO; +import net.alawn.bill.util.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.web.PageableDefault; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author Zheng Jie + * @date 2018-12-03 + */ +@RestController +@RequestMapping("api") +public class RoleController { + + @Autowired + private RoleService roleService; + + private static final String ENTITY_NAME = "role"; + + /** + * 获取单个role + * @param id + * @return + */ + @GetMapping(value = "/roles/{id}") + @PreAuthorize("hasAnyAuthority('admin','role:all','role:select')") + public ResponseEntity getRoles(@PathVariable Long id){ + return new ResponseEntity(roleService.findById(id), HttpStatus.OK); + } + + /** + * 返回全部的角色,新增用户时下拉选择 + * @return + */ + @GetMapping(value = "/roles/all") + @PreAuthorize("hasAnyAuthority('admin','role:all','user:all','user:create','user:edit')") + public ResponseEntity getAll(@PageableDefault(value = 2000, sort = {"level"}, direction = Sort.Direction.ASC) Pageable pageable){ + return new ResponseEntity(roleService.queryAll(pageable), HttpStatus.OK); + } + +// @Log("查询角色") + @GetMapping(value = "/roles") + @PreAuthorize("hasAnyAuthority('admin','role:all','role:select')") + public ResponseEntity getRoles(CommonQueryCriteria criteria, Pageable pageable){ + return new ResponseEntity(roleService.queryAll(criteria,pageable), HttpStatus.OK); + } + + @GetMapping(value = "/roles/level") + public ResponseEntity getLevel(){ + List levels = roleService.findByUsers_Id(SecurityUtils.getUserId()).stream().map(RoleSmallDTO::getLevel).collect(Collectors.toList()); + return new ResponseEntity(Dict.create().set("level", Collections.min(levels)), HttpStatus.OK); + } + +// @Log("新增角色") + @PostMapping(value = "/roles") + @PreAuthorize("hasAnyAuthority('admin','role:all','role:create')") + public ResponseEntity create(@Validated @RequestBody Role resources){ + if (resources.getId() != null) { + throw new BadRequestException("A new "+ ENTITY_NAME +" cannot already have an ID"); + } + + return new ResponseEntity(roleService.create(resources), HttpStatus.CREATED); + } + +// @Log("修改角色") + @PutMapping(value = "/roles") + @PreAuthorize("hasAnyAuthority('admin','role:all','role:update')") + public ResponseEntity update(@Validated(Role.Update.class) @RequestBody Role resources){ + roleService.update(resources); + return new ResponseEntity(HttpStatus.NO_CONTENT); + } + +// @Log("修改角色权限") + @PutMapping(value = "/roles/permission") + @PreAuthorize("hasAnyAuthority('admin','role:all','role:update')") + public ResponseEntity updatePermission(@RequestBody Role resources){ + roleService.updatePermission(resources,roleService.findById(resources.getId())); + return new ResponseEntity(HttpStatus.NO_CONTENT); + } + +// @Log("修改角色菜单") + @PutMapping(value = "/roles/menu") + @PreAuthorize("hasAnyAuthority('admin','role:all','role:update')") + public ResponseEntity updateMenu(@RequestBody Role resources){ + roleService.updateMenu(resources,roleService.findById(resources.getId())); + return new ResponseEntity(HttpStatus.NO_CONTENT); + } + +// @Log("删除角色") + @DeleteMapping(value = "/roles/{id}") + @PreAuthorize("hasAnyAuthority('admin','role:all','role:delete')") + public ResponseEntity delete(@PathVariable Long id){ + roleService.delete(id); + return new ResponseEntity(HttpStatus.OK); + } +} diff --git a/src/main/java/net/alawn/bill/controller/TitleController.java b/src/main/java/net/alawn/bill/controller/TitleController.java index f154401..6d02929 100644 --- a/src/main/java/net/alawn/bill/controller/TitleController.java +++ b/src/main/java/net/alawn/bill/controller/TitleController.java @@ -5,6 +5,7 @@ import net.alawn.bill.entity.po.Title; import net.alawn.bill.repository.TitleRepo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -27,19 +28,22 @@ public class TitleController { @RequestMapping(value = "/titles",method = RequestMethod.POST) @ResponseBody - public ResponseEntity addTitle(@RequestBody Title resources) { + @PreAuthorize("hasAnyAuthority('admin','title:all','title:create','book:create','book:edit')") + public ResponseEntity<Title> create(@RequestBody Title resources) { return ResponseEntity.ok(titleRepo.saveAndFlush(resources)); } @RequestMapping(value = "/titles",method = RequestMethod.GET) @ResponseBody - public ResponseEntity<List<Title>> addTitle() { + @PreAuthorize("hasAnyAuthority('admin','title:all','title:select','book:create','book:edit')") + public ResponseEntity<List<Title>> fetch() { return ResponseEntity.ok(titleRepo.findAll()); } @RequestMapping(value = "/titles/{id}",method = RequestMethod.GET) @ResponseBody - public ResponseEntity<Title> getTitle(@PathVariable long id){ + @PreAuthorize("hasAnyAuthority('admin','title:all','title:select')") + public ResponseEntity<Title> get(@PathVariable long id){ /** 登记 Title */ Optional<Title> title = titleRepo.findById(id); if(title.isPresent()) { diff --git a/src/main/java/net/alawn/bill/controller/UserController.java b/src/main/java/net/alawn/bill/controller/UserController.java index 0a35624..55b2a5f 100644 --- a/src/main/java/net/alawn/bill/controller/UserController.java +++ b/src/main/java/net/alawn/bill/controller/UserController.java @@ -1,8 +1,10 @@ package net.alawn.bill.controller; import lombok.extern.slf4j.Slf4j; +import net.alawn.bill.constant.RoleConstants; import net.alawn.bill.entity.po.User; import net.alawn.bill.exception.BadRequestException; +import net.alawn.bill.repository.RoleRepo; import net.alawn.bill.security.JwtUser; import net.alawn.bill.service.RoleService; import net.alawn.bill.service.UserService; @@ -41,6 +43,9 @@ public class UserController { @Autowired private RoleService roleService; + @Autowired + private RoleRepo roleRepo; + /** * 添加用户 * @param resources @@ -49,9 +54,29 @@ public class UserController { * @throws HttpRequestMethodNotSupportedException */ @RequestMapping(value = "/users", method = RequestMethod.POST) -// @PreAuthorize("hasAnyRole('admin','user:all','user:create')") public ResponseEntity create(@Validated @RequestBody User resources) throws AuthenticationException, HttpRequestMethodNotSupportedException { -// return authService.register(addedUser); + /** + * 普通用户注册默认称为客户 + */ + resources.addRole(roleRepo.findByName(RoleConstants.CUSTOMER)); + return new ResponseEntity(userService.create(resources), HttpStatus.CREATED); + } + + + + /** + * 添加供应商 + * @param resources + * @return + * @throws AuthenticationException + * @throws HttpRequestMethodNotSupportedException + */ + @RequestMapping(value = "/users/vendors", method = RequestMethod.POST) + public ResponseEntity createVendor(@Validated @RequestBody User resources) throws AuthenticationException, HttpRequestMethodNotSupportedException { + /** + * 供应商注册 + */ + resources.addRole(roleRepo.findByName(RoleConstants.VENDOR)); return new ResponseEntity(userService.create(resources), HttpStatus.CREATED); } @@ -61,7 +86,7 @@ public class UserController { * @return */ @RequestMapping(value = "/users", method = RequestMethod.PUT) - @PreAuthorize("hasAnyRole('admin','user:all','user:edit')") + @PreAuthorize("hasAnyAuthority('admin','user:all','user:update')") public ResponseEntity update(@Validated(User.Update.class) @RequestBody User resources){ checkLevel(resources); userService.update(resources); @@ -75,7 +100,7 @@ public class UserController { * @return */ @RequestMapping(value = "/users/{id}", method = RequestMethod.DELETE) - @PreAuthorize("hasAnyRole('admin','user:all','user:delete')") + @PreAuthorize("hasAnyAuthority('admin','user:all','user:delete')") public ResponseEntity delete(@PathVariable Long id){ // Integer currentLevel = Collections.min(roleService.findByUser_Id(SecurityUtils.getUserId()).stream().map(RoleSmallDTO::getLevel).collect(Collectors.toList())); // Integer optLevel = Collections.min(roleService.findByUser_Id(id).stream().map(RoleSmallDTO::getLevel).collect(Collectors.toList())); @@ -94,7 +119,7 @@ public class UserController { * @return */ @RequestMapping(value = "/users", method = RequestMethod.GET) -// @PreAuthorize("hasAnyRole('admin','user:all','user:select')") + @PreAuthorize("hasAnyAuthority('admin','user:all','user:select')") public ResponseEntity getUsers(UserQueryCriteria criteria, Pageable pageable){ return new ResponseEntity(userService.queryAll(criteria,pageable),HttpStatus.OK); // Set<Long> deptSet = new HashSet<>(); @@ -135,6 +160,7 @@ public class UserController { * @return */ @RequestMapping(value = "/users/updatePassword",method = RequestMethod.POST) + @PreAuthorize("hasAnyAuthority('admin','user:all','user:update')") public ResponseEntity updatePass(@RequestBody User user){ UserDetails userDetails = (JwtUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); diff --git a/src/main/java/net/alawn/bill/entity/po/Book.java b/src/main/java/net/alawn/bill/entity/po/Book.java index 271be4e..b5f4e51 100644 --- a/src/main/java/net/alawn/bill/entity/po/Book.java +++ b/src/main/java/net/alawn/bill/entity/po/Book.java @@ -10,9 +10,8 @@ import net.alawn.bill.enums.State; import org.hibernate.annotations.DynamicUpdate; import org.hibernate.annotations.NotFound; import org.hibernate.annotations.NotFoundAction; - -import javax.persistence.*; import javax.validation.constraints.NotNull; +import javax.persistence.*; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; diff --git a/src/main/java/net/alawn/bill/entity/po/Merchant.java b/src/main/java/net/alawn/bill/entity/po/Merchant.java index 73df990..6b935a2 100644 --- a/src/main/java/net/alawn/bill/entity/po/Merchant.java +++ b/src/main/java/net/alawn/bill/entity/po/Merchant.java @@ -54,7 +54,7 @@ public class Merchant extends EntityCommon { * 启用状态 */ @Column - @Builder.Default +// @Builder.Default private boolean enabled = true; public @interface Update{} diff --git a/src/main/java/net/alawn/bill/entity/po/Permission.java b/src/main/java/net/alawn/bill/entity/po/Permission.java index 9905bf1..6c472bc 100644 --- a/src/main/java/net/alawn/bill/entity/po/Permission.java +++ b/src/main/java/net/alawn/bill/entity/po/Permission.java @@ -2,6 +2,7 @@ package net.alawn.bill.entity.po; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModel; import lombok.*; import org.hibernate.annotations.DynamicUpdate; @@ -26,6 +27,7 @@ import java.util.Set; @AllArgsConstructor @JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" },ignoreUnknown = true) @DynamicUpdate +@ApiModel //public class Permission{ public class Permission extends EntityCommon { diff --git a/src/main/java/net/alawn/bill/entity/po/Post.java b/src/main/java/net/alawn/bill/entity/po/Post.java index 1e7fc04..ce61b77 100644 --- a/src/main/java/net/alawn/bill/entity/po/Post.java +++ b/src/main/java/net/alawn/bill/entity/po/Post.java @@ -33,7 +33,6 @@ public class Post extends EntityCommon { @Id @GeneratedValue(strategy = GenerationType.AUTO) @NotNull(groups = {Update.class}) -// @ApiModelProperty(hidden = true) protected Long id; // public Post(long id) { diff --git a/src/main/java/net/alawn/bill/entity/po/Role.java b/src/main/java/net/alawn/bill/entity/po/Role.java index 6c93a97..e12a806 100644 --- a/src/main/java/net/alawn/bill/entity/po/Role.java +++ b/src/main/java/net/alawn/bill/entity/po/Role.java @@ -2,11 +2,13 @@ package net.alawn.bill.entity.po; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModel; import lombok.*; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.*; import javax.validation.constraints.NotNull; +import java.util.HashSet; import java.util.Set; @Data @@ -18,6 +20,7 @@ import java.util.Set; @AllArgsConstructor @JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" },ignoreUnknown = true) @DynamicUpdate +@ApiModel public class Role extends EntityCommon { //public class Role{ @@ -46,7 +49,7 @@ public class Role extends EntityCommon { joinColumns = {@JoinColumn(name = "role_id",referencedColumnName = "id")}, inverseJoinColumns = {@JoinColumn(name = "permission_id",referencedColumnName = "id")}, foreignKey = @ForeignKey(name = "none",value = ConstraintMode.NO_CONSTRAINT)) - private Set<Permission> permissions; + private Set<Permission> permissions = new HashSet<>(); public @interface Update{} diff --git a/src/main/java/net/alawn/bill/entity/po/Title.java b/src/main/java/net/alawn/bill/entity/po/Title.java index c9067c8..0bea20b 100644 --- a/src/main/java/net/alawn/bill/entity/po/Title.java +++ b/src/main/java/net/alawn/bill/entity/po/Title.java @@ -30,7 +30,6 @@ public class Title extends EntityCommon { @Id @GeneratedValue(strategy = GenerationType.AUTO) @NotNull(groups = {Update.class}) -// @ApiModelProperty(hidden = true) private Long id; private String name; diff --git a/src/main/java/net/alawn/bill/entity/po/User.java b/src/main/java/net/alawn/bill/entity/po/User.java index c0ab584..3084cb1 100644 --- a/src/main/java/net/alawn/bill/entity/po/User.java +++ b/src/main/java/net/alawn/bill/entity/po/User.java @@ -11,8 +11,10 @@ import org.springframework.util.StringUtils; import javax.persistence.*; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import java.util.Date; +import java.util.HashSet; import java.util.Set; /** @@ -41,6 +43,7 @@ public class User extends EntityCommon { @Id @GeneratedValue(strategy = GenerationType.AUTO) + @NotNull(groups = {Update.class}) private Long id; // public User(long id) { @@ -82,7 +85,7 @@ public class User extends EntityCommon { /** 上一次重置密码时间 */ private Date lastPasswordResetDate; - @Builder.Default +// @Builder.Default private boolean enabled = true; // @OneToMany(mappedBy = "user", fetch = FetchType.EAGER) @@ -92,7 +95,16 @@ public class User extends EntityCommon { @JoinTable(name = "t_bill_users_roles", joinColumns = {@JoinColumn(name = "user_id",referencedColumnName = "id")}, inverseJoinColumns = {@JoinColumn(name = "role_id",referencedColumnName = "id")}) - private Set<Role> roles; + private Set<Role> roles = new HashSet<>(); + + + public void addRole(Role role) { + this.roles.add(role); + } + + public void removeRole(Role role) { + this.roles.remove(role); + } /** diff --git a/src/main/java/net/alawn/bill/mapper/PermissionMapper.java b/src/main/java/net/alawn/bill/mapper/PermissionMapper.java index 71cb5f2..bce2eaf 100644 --- a/src/main/java/net/alawn/bill/mapper/PermissionMapper.java +++ b/src/main/java/net/alawn/bill/mapper/PermissionMapper.java @@ -11,7 +11,8 @@ import org.mapstruct.factory.Mappers; * @author Alawn * @date 2018-11-23 */ -@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE) +//@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE) +@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) public interface PermissionMapper extends EntityMapper<PermissionDTO, Permission> { PermissionMapper INSTANCE = Mappers.getMapper( PermissionMapper.class ); diff --git a/src/main/java/net/alawn/bill/mapper/RoleMapper.java b/src/main/java/net/alawn/bill/mapper/RoleMapper.java index 499f16d..68e1330 100644 --- a/src/main/java/net/alawn/bill/mapper/RoleMapper.java +++ b/src/main/java/net/alawn/bill/mapper/RoleMapper.java @@ -11,7 +11,8 @@ import org.mapstruct.factory.Mappers; * @author Alawn * @date 2018-11-23 */ -@Mapper(componentModel = "spring", uses = {PermissionMapper.class, }, unmappedTargetPolicy = ReportingPolicy.IGNORE) +@Mapper(uses = {PermissionMapper.class}, unmappedTargetPolicy = ReportingPolicy.IGNORE) +//@Mapper(componentModel = "spring", uses = {PermissionMapper.class}, unmappedTargetPolicy = ReportingPolicy.IGNORE) public interface RoleMapper extends EntityMapper<RoleDTO, Role> { RoleMapper INSTANCE = Mappers.getMapper( RoleMapper.class ); } diff --git a/src/main/java/net/alawn/bill/mapper/RoleSmallMapper.java b/src/main/java/net/alawn/bill/mapper/RoleSmallMapper.java index 6ccbf13..af95bc8 100644 --- a/src/main/java/net/alawn/bill/mapper/RoleSmallMapper.java +++ b/src/main/java/net/alawn/bill/mapper/RoleSmallMapper.java @@ -11,7 +11,8 @@ import org.mapstruct.factory.Mappers; * @author Alawn * @date 2019-06-21 */ -@Mapper(componentModel = "spring", uses = {}, unmappedTargetPolicy = ReportingPolicy.IGNORE) +//@Mapper(componentModel = "spring", uses = {}, unmappedTargetPolicy = ReportingPolicy.IGNORE) +@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) public interface RoleSmallMapper extends EntityMapper<RoleSmallDTO, Role> { RoleSmallMapper INSTANCE = Mappers.getMapper( RoleSmallMapper.class ); diff --git a/src/main/java/net/alawn/bill/mapper/UserMapper.java b/src/main/java/net/alawn/bill/mapper/UserMapper.java index 94b2196..9619ba8 100644 --- a/src/main/java/net/alawn/bill/mapper/UserMapper.java +++ b/src/main/java/net/alawn/bill/mapper/UserMapper.java @@ -14,7 +14,8 @@ import org.mapstruct.factory.Mappers; * @date 2018-11-23 */ -@Mapper(componentModel = "spring",uses = {RoleMapper.class},unmappedTargetPolicy = ReportingPolicy.IGNORE) +@Mapper(uses = {RoleMapper.class,RoleSmallMapper.class},unmappedTargetPolicy = ReportingPolicy.IGNORE) +//@Mapper(componentModel = "spring",uses = {RoleMapper.class,,RoleSmallMapper.class},unmappedTargetPolicy = ReportingPolicy.IGNORE) public interface UserMapper extends EntityMapper<UserDTO, User> { UserMapper INSTANCE = Mappers.getMapper( UserMapper.class ); } diff --git a/src/main/java/net/alawn/bill/service/dto/PermissionDTO.java b/src/main/java/net/alawn/bill/service/dto/PermissionDTO.java index 3dcafcb..0cd47f1 100644 --- a/src/main/java/net/alawn/bill/service/dto/PermissionDTO.java +++ b/src/main/java/net/alawn/bill/service/dto/PermissionDTO.java @@ -1,7 +1,6 @@ package net.alawn.bill.service.dto; import lombok.Data; -import lombok.ToString; import java.io.Serializable; import java.sql.Timestamp; @@ -12,7 +11,6 @@ import java.util.List; * @date 2019-06-21 */ @Data -@ToString public class PermissionDTO implements Serializable{ private Long id; diff --git a/src/main/java/net/alawn/bill/service/dto/UserDTO.java b/src/main/java/net/alawn/bill/service/dto/UserDTO.java index 44b2e73..bdeb5eb 100644 --- a/src/main/java/net/alawn/bill/service/dto/UserDTO.java +++ b/src/main/java/net/alawn/bill/service/dto/UserDTO.java @@ -2,14 +2,12 @@ package net.alawn.bill.service.dto; import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.annotations.ApiModelProperty; -import lombok.Builder; import lombok.Data; import java.io.Serializable; import java.util.Date; import java.util.Set; -@Builder @Data public class UserDTO implements Serializable { diff --git a/src/main/java/net/alawn/bill/service/impl/RoleServiceImpl.java b/src/main/java/net/alawn/bill/service/impl/RoleServiceImpl.java index 1d430fb..26fc127 100644 --- a/src/main/java/net/alawn/bill/service/impl/RoleServiceImpl.java +++ b/src/main/java/net/alawn/bill/service/impl/RoleServiceImpl.java @@ -4,6 +4,7 @@ import net.alawn.bill.entity.po.Role; import net.alawn.bill.exception.EntityExistException; import net.alawn.bill.mapper.RoleMapper; import net.alawn.bill.mapper.RoleSmallMapper; +import net.alawn.bill.repository.PermissionRepo; import net.alawn.bill.repository.RoleRepo; import net.alawn.bill.service.RoleService; import net.alawn.bill.service.dto.CommonQueryCriteria; @@ -33,6 +34,10 @@ public class RoleServiceImpl implements RoleService { @Autowired private RoleRepo roleRepo; + @Autowired + private PermissionRepo permissionRepo; + + // @Resource // private RoleMapper roleMapper; // @@ -66,7 +71,9 @@ public class RoleServiceImpl implements RoleService { if(roleRepo.findByName(resources.getName()) != null){ throw new EntityExistException(Role.class,"username",resources.getName()); } -// return roleMapper.toDto(roleRepo.save(resources)); + +// /** 所有角色初始一个权限浏览的Authority,以至于Permissions不为Null */ +// resources.getPermissions().add(permissionRepo.findByPerms(AuthorityConstants.PERMISSION_SELECT)); return RoleMapper.INSTANCE.toDto(roleRepo.save(resources)); } diff --git a/src/main/java/net/alawn/bill/service/impl/UserServiceImpl.java b/src/main/java/net/alawn/bill/service/impl/UserServiceImpl.java index c2e69f8..9a5b9c9 100644 --- a/src/main/java/net/alawn/bill/service/impl/UserServiceImpl.java +++ b/src/main/java/net/alawn/bill/service/impl/UserServiceImpl.java @@ -32,6 +32,7 @@ public class UserServiceImpl implements UserService { @Autowired UserRepo userRepo; + // @Autowired // UserMapper userMapper; @@ -39,6 +40,7 @@ public class UserServiceImpl implements UserService { public UserDTO findById(long id) { Optional<User> user = userRepo.findById(id); ValidationUtils.isNull(user,"User","id",id); +// return userMapper.toDto(user.get()); // return userMapper.toDto(user.get()); return UserMapper.INSTANCE.toDto(user.get()); } @@ -118,7 +120,7 @@ public class UserServiceImpl implements UserService { if (user == null) { throw new EntityNotFoundException(User.class, "name", userName); } else { -// UserDTO dto = userMapper.toDto(user); +// return userMapper.toDto(user); return UserMapper.INSTANCE.toDto(user); } }