From f09d2c0e2a341254bf5ced12ffbe275b28bda9b5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E5=88=98=E6=B4=AA=E9=9D=92?= Date: Thu, 19 Sep 2019 18:08:12 +0800 Subject: [PATCH] =?utf8?q?feat:=20=E7=99=BB=E5=BD=95=E7=94=A8=E6=88=B7?= =?utf8?q?=E7=9B=B8=E5=85=B3=E6=95=B0=E6=8D=AE=E7=9A=84=E8=AF=BB=E5=8F=96?= =?utf8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../v1/admin/AdminApplicationController.java | 2 +- .../api/v1/admin/AdminMenuController.java | 10 +- .../v1/admin/AdminPermissionController.java | 28 +-- .../api/v1/authn/AuthnAccountController.java | 192 ++++++++++++++++++ .../AuthnAccountPermissionsResponseData.java | 31 +++ .../AuthnAccountResourcesResponseData.java | 31 +++ .../vo/response/AuthnAccountResponseData.java | 19 ++ .../AuthnAccountRolesResponseData.java | 31 +++ .../base/domain/entity/Permission.java | 4 +- .../domain/repo/PermissionRepository.java | 114 ++++++----- .../base/domain/repo/RoleRepository.java | 12 -- .../base/domain/service/AccountService.java | 4 + .../domain/service/PermissionService.java | 140 ++++++++++++- .../base/domain/service/RoleService.java | 19 ++ 14 files changed, 540 insertions(+), 97 deletions(-) create mode 100644 base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/authn/AuthnAccountController.java create mode 100644 base/api/src/main/java/com/supwisdom/institute/backend/base/api/vo/response/AuthnAccountPermissionsResponseData.java create mode 100644 base/api/src/main/java/com/supwisdom/institute/backend/base/api/vo/response/AuthnAccountResourcesResponseData.java create mode 100644 base/api/src/main/java/com/supwisdom/institute/backend/base/api/vo/response/AuthnAccountResponseData.java create mode 100644 base/api/src/main/java/com/supwisdom/institute/backend/base/api/vo/response/AuthnAccountRolesResponseData.java diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/admin/AdminApplicationController.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/admin/AdminApplicationController.java index 41a23bb..1cdaaf6 100644 --- a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/admin/AdminApplicationController.java +++ b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/admin/AdminApplicationController.java @@ -35,7 +35,7 @@ import com.supwisdom.institute.backend.base.domain.service.ApplicationService; import com.supwisdom.institute.backend.common.framework.entity.EntityUtils; import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse; -@Api(value = "BaseAdminApplication", tags = { "BaseAdminApplication" }, description = "路由信息的操作接口") +@Api(value = "BaseAdminApplication", tags = { "BaseAdminApplication" }, description = "应用的操作接口") @Slf4j @RestController @RequestMapping("/v1/admin/applications") diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/admin/AdminMenuController.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/admin/AdminMenuController.java index 9526d94..67a2d3e 100644 --- a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/admin/AdminMenuController.java +++ b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/admin/AdminMenuController.java @@ -2,7 +2,6 @@ package com.supwisdom.institute.backend.base.api.v1.admin; import java.util.HashMap; import java.util.List; -import java.util.Map; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; @@ -18,6 +17,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; @@ -184,12 +184,10 @@ public class AdminMenuController { @GetMapping(path = "/tree", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) @ResponseStatus(value = HttpStatus.OK) @ResponseBody - public DefaultApiResponse tree() { + public DefaultApiResponse tree( + @RequestParam(name = "applicationId", required = false) String applicationId) { - Map mapBean = new HashMap(); - mapBean.put("type", Permission.TYPE_MENU); - - PermissionTreeNode tree = permissionService.selectPermissionTree(mapBean); + PermissionTreeNode tree = permissionService.selectPermissionTree(applicationId, Permission.TYPE_MENU); PermissionTreeResponseData data = PermissionTreeResponseData.of(tree); diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/admin/AdminPermissionController.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/admin/AdminPermissionController.java index f10244a..7fc4481 100644 --- a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/admin/AdminPermissionController.java +++ b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/admin/AdminPermissionController.java @@ -29,19 +29,19 @@ public class AdminPermissionController { @Autowired private PermissionService permissionService; - @GetMapping(path = "/tree", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) - @ResponseStatus(value = HttpStatus.OK) - @ResponseBody - public DefaultApiResponse tree() { - - Map mapBean = new HashMap(); - //mapBean.put("type", Permission.TYPE_MENU); - - PermissionTreeNode tree = permissionService.selectPermissionTree(mapBean); - - PermissionTreeResponseData data = PermissionTreeResponseData.of(tree); - - return new DefaultApiResponse(data); - } +// @GetMapping(path = "/tree", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) +// @ResponseStatus(value = HttpStatus.OK) +// @ResponseBody +// public DefaultApiResponse tree() { +// +// Map mapBean = new HashMap(); +// //mapBean.put("type", Permission.TYPE_MENU); +// +// PermissionTreeNode tree = permissionService.selectPermissionTree(mapBean); +// +// PermissionTreeResponseData data = PermissionTreeResponseData.of(tree); +// +// return new DefaultApiResponse(data); +// } } diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/authn/AuthnAccountController.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/authn/AuthnAccountController.java new file mode 100644 index 0000000..76663d2 --- /dev/null +++ b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/authn/AuthnAccountController.java @@ -0,0 +1,192 @@ +package com.supwisdom.institute.backend.base.api.v1.authn; + +import java.util.List; + +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.util.MimeTypeUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +import com.supwisdom.institute.backend.base.api.vo.response.AuthnAccountPermissionsResponseData; +import com.supwisdom.institute.backend.base.api.vo.response.AuthnAccountResourcesResponseData; +import com.supwisdom.institute.backend.base.api.vo.response.AuthnAccountResponseData; +import com.supwisdom.institute.backend.base.api.vo.response.AuthnAccountRolesResponseData; +import com.supwisdom.institute.backend.base.domain.entity.Account; +import com.supwisdom.institute.backend.base.domain.entity.Permission; +import com.supwisdom.institute.backend.base.domain.entity.Resource; +import com.supwisdom.institute.backend.base.domain.entity.Role; +import com.supwisdom.institute.backend.base.domain.service.AccountService; +import com.supwisdom.institute.backend.base.domain.service.PermissionService; +import com.supwisdom.institute.backend.base.domain.service.ResourceService; +import com.supwisdom.institute.backend.base.domain.service.RoleService; +import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse; + +@Api(value = "BaseAuthnAccount", tags = { "BaseAuthnAccount" }, description = "帐号接口(认证、授权用)") +@Slf4j +@RestController +@RequestMapping("/v1/authn") +public class AuthnAccountController { + + @Autowired + private AccountService accountService; + + @Autowired + private RoleService roleService; + + @Autowired + private PermissionService permissionService; + + @Autowired + private ResourceService resourceService; + + @GetMapping(path = "/{username}/account", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @ResponseStatus(value = HttpStatus.OK) + @ResponseBody + public DefaultApiResponse account( + @PathVariable("username") String username) { + + if (username == null || username.length() == 0) { + throw new RuntimeException("exception.get.username.must.not.empty"); + } + + Account account = accountService.selectByUsername(username); + + if (account == null) { + throw new RuntimeException("exception.get.account.not.exist"); + } + + AuthnAccountResponseData data = AuthnAccountResponseData.of(account); + + return new DefaultApiResponse(data); + } + + + @GetMapping(path = "/{username}/roles", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @ResponseStatus(value = HttpStatus.OK) + @ResponseBody + public DefaultApiResponse roles( + @PathVariable("username") String username) { + + if (username == null || username.length() == 0) { + throw new RuntimeException("exception.get.username.must.not.empty"); + } + + Account account = accountService.selectByUsername(username); + + if (account == null) { + throw new RuntimeException("exception.get.account.not.exist"); + } + + List roles = roleService.selectByUsername(username); + + AuthnAccountRolesResponseData data = AuthnAccountRolesResponseData.of(roles); + + return new DefaultApiResponse(data); + } + + @GetMapping(path = "/{username}/applications", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @ResponseStatus(value = HttpStatus.OK) + @ResponseBody + public DefaultApiResponse applications( + @PathVariable("username") String username, + @RequestParam(name = "applicationId", required = false) String applicationId) { + + if (username == null || username.length() == 0) { + throw new RuntimeException("exception.get.username.must.not.empty"); + } + + Account account = accountService.selectByUsername(username); + + if (account == null) { + throw new RuntimeException("exception.get.account.not.exist"); + } + + List applications = permissionService.selectByUsername(username, null, Permission.TYPE_APPLICATION); + + AuthnAccountPermissionsResponseData data = AuthnAccountPermissionsResponseData.of(applications); + + return new DefaultApiResponse(data); + } + + @GetMapping(path = "/{username}/menus", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @ResponseStatus(value = HttpStatus.OK) + @ResponseBody + public DefaultApiResponse menus( + @PathVariable("username") String username, + @RequestParam(name = "applicationId", required = false) String applicationId) { + + if (username == null || username.length() == 0) { + throw new RuntimeException("exception.get.username.must.not.empty"); + } + + Account account = accountService.selectByUsername(username); + + if (account == null) { + throw new RuntimeException("exception.get.account.not.exist"); + } + + List menus = permissionService.selectByUsername(username, applicationId, Permission.TYPE_MENU); + + AuthnAccountPermissionsResponseData data = AuthnAccountPermissionsResponseData.of(menus); + + return new DefaultApiResponse(data); + } + + @GetMapping(path = "/{username}/operations", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @ResponseStatus(value = HttpStatus.OK) + @ResponseBody + public DefaultApiResponse operations( + @PathVariable("username") String username, + @RequestParam(name = "applicationId", required = false) String applicationId) { + + if (username == null || username.length() == 0) { + throw new RuntimeException("exception.get.username.must.not.empty"); + } + + Account account = accountService.selectByUsername(username); + + if (account == null) { + throw new RuntimeException("exception.get.account.not.exist"); + } + + List operations = permissionService.selectByUsername(username, applicationId, Permission.TYPE_OPERATION); + + AuthnAccountPermissionsResponseData data = AuthnAccountPermissionsResponseData.of(operations); + + return new DefaultApiResponse(data); + } + + @GetMapping(path = "/{username}/resources", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @ResponseStatus(value = HttpStatus.OK) + @ResponseBody + public DefaultApiResponse resources( + @PathVariable("username") String username, + @RequestParam(name = "applicationId", required = false) String applicationId) { + + if (username == null || username.length() == 0) { + throw new RuntimeException("exception.get.username.must.not.empty"); + } + + Account account = accountService.selectByUsername(username); + + if (account == null) { + throw new RuntimeException("exception.get.account.not.exist"); + } + + List resources = null;// FIXME: resourceService.selectByUsername(username, applicationId); + + AuthnAccountResourcesResponseData data = AuthnAccountResourcesResponseData.of(resources); + + return new DefaultApiResponse(data); + } + +} diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/vo/response/AuthnAccountPermissionsResponseData.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/vo/response/AuthnAccountPermissionsResponseData.java new file mode 100644 index 0000000..e1666ed --- /dev/null +++ b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/vo/response/AuthnAccountPermissionsResponseData.java @@ -0,0 +1,31 @@ +package com.supwisdom.institute.backend.base.api.vo.response; + +import java.util.List; + +import lombok.Getter; +import lombok.Setter; + +import com.supwisdom.institute.backend.base.domain.entity.Permission; +import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData; + +public class AuthnAccountPermissionsResponseData implements IApiResponseData { + + /** + * + */ + private static final long serialVersionUID = 8276878427539012799L; + + @Getter + @Setter + public List permissions; + + + public static AuthnAccountPermissionsResponseData of(List permissions) { + AuthnAccountPermissionsResponseData data = new AuthnAccountPermissionsResponseData(); + + data.setPermissions(permissions); + + return data; + } + +} diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/vo/response/AuthnAccountResourcesResponseData.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/vo/response/AuthnAccountResourcesResponseData.java new file mode 100644 index 0000000..b62dabf --- /dev/null +++ b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/vo/response/AuthnAccountResourcesResponseData.java @@ -0,0 +1,31 @@ +package com.supwisdom.institute.backend.base.api.vo.response; + +import java.util.List; + +import lombok.Getter; +import lombok.Setter; + +import com.supwisdom.institute.backend.base.domain.entity.Resource; +import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData; + +public class AuthnAccountResourcesResponseData implements IApiResponseData { + + /** + * + */ + private static final long serialVersionUID = 4924064418294890589L; + + @Getter + @Setter + public List resources; + + + public static AuthnAccountResourcesResponseData of(List resources) { + AuthnAccountResourcesResponseData data = new AuthnAccountResourcesResponseData(); + + data.setResources(resources); + + return data; + } + +} diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/vo/response/AuthnAccountResponseData.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/vo/response/AuthnAccountResponseData.java new file mode 100644 index 0000000..85cddde --- /dev/null +++ b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/vo/response/AuthnAccountResponseData.java @@ -0,0 +1,19 @@ +package com.supwisdom.institute.backend.base.api.vo.response; + +import com.supwisdom.institute.backend.base.domain.entity.Account; +import com.supwisdom.institute.backend.common.framework.entity.EntityUtils; +import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData; + +public class AuthnAccountResponseData extends Account implements IApiResponseData { + + /** + * + */ + private static final long serialVersionUID = -289285783805128927L; + + public static AuthnAccountResponseData of(Account entity) { + AuthnAccountResponseData data = new AuthnAccountResponseData(); + return EntityUtils.copy(entity, data); + } + +} diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/vo/response/AuthnAccountRolesResponseData.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/vo/response/AuthnAccountRolesResponseData.java new file mode 100644 index 0000000..9fc82ef --- /dev/null +++ b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/vo/response/AuthnAccountRolesResponseData.java @@ -0,0 +1,31 @@ +package com.supwisdom.institute.backend.base.api.vo.response; + +import java.util.List; + +import lombok.Getter; +import lombok.Setter; + +import com.supwisdom.institute.backend.base.domain.entity.Role; +import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData; + +public class AuthnAccountRolesResponseData implements IApiResponseData { + + /** + * + */ + private static final long serialVersionUID = -6588284546370817275L; + + @Getter + @Setter + public List roles; + + + public static AuthnAccountRolesResponseData of(List roles) { + AuthnAccountRolesResponseData data = new AuthnAccountRolesResponseData(); + + data.setRoles(roles); + + return data; + } + +} diff --git a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/entity/Permission.java b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/entity/Permission.java index 1fedb61..7fdd8c0 100644 --- a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/entity/Permission.java +++ b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/entity/Permission.java @@ -15,11 +15,11 @@ public class Permission extends ABaseEntity { */ private static final long serialVersionUID = -8834200833972243635L; - // public static final String ROOT_PARENT_ID = "0"; + public static final String ROOT_PARENT_ID = "0"; public static final String APPLICATION_ID = "1"; - public static final String TYPE_SYSTEM = "1"; + public static final String TYPE_APPLICATION = "1"; public static final String TYPE_MENU = "2"; public static final String TYPE_OPERATION = "3"; diff --git a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/repo/PermissionRepository.java b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/repo/PermissionRepository.java index c48af15..623411d 100644 --- a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/repo/PermissionRepository.java +++ b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/repo/PermissionRepository.java @@ -3,7 +3,6 @@ package com.supwisdom.institute.backend.base.domain.repo; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Optional; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; @@ -321,28 +320,29 @@ public interface PermissionRepository extends BaseJpaRepository { BaseJpaRepository.super.delete(id); } + + - public default Permission selectApplicationPermissionByCode(String code) { - Permission probe = new Permission(); - probe.setCode(code); - probe.setType("1"); - - ExampleMatcher matcher = ExampleMatcher.matching() - .withMatcher("code", ExampleMatcher.GenericPropertyMatchers.exact()) - .withMatcher("type", ExampleMatcher.GenericPropertyMatchers.exact()); - - Example example = Example.of(probe, matcher); + + public default List selectList(boolean loadAll, int pageIndex, int pageSize, Map mapBean, Map orderBy) { - Optional o = this.findOne(example); + Specification spec = convertToSpec(mapBean); - if (o.isPresent()) { - return o.get(); + if (loadAll) { + pageIndex = 0; + pageSize = Integer.MAX_VALUE; } - return null; + Sort sort = convertToSort(orderBy); + + if (sort == null) { + return this.findAll(spec); + } else { + return this.findAll(spec, sort); + } } + - @Query(value = "select p from Permission p " + "inner join RolePermission rp on p.id=rp.permissionId " @@ -368,46 +368,52 @@ public interface PermissionRepository extends BaseJpaRepository { + "and p.status='1' and r.status='1' and g.status='1' and a.status='1' and a.enabled=1 ") public List selectAccountGroupRolePermissionByUsername(@Param("username") String username, @Param("lft") int lft, @Param("rgt") int rgt, @Param("type") String type); - public default List selectByUsername(String username, String applicationCode, String type) { - List permissions = new ArrayList(); - - Permission applicationPermission = selectApplicationPermissionByCode(applicationCode); - if (applicationPermission == null) { - return permissions; - } - - int lft = applicationPermission.getLft(); - int rgt = applicationPermission.getRgt(); - - List accountRolePermissions = selectAccountRolePermissionByUsername(username, lft, rgt, type); - permissions.addAll(accountRolePermissions); - - List accountGroupRolePermissions = selectAccountGroupRolePermissionByUsername(username, lft, rgt, type); - permissions.addAll(accountGroupRolePermissions); - - return permissions; - } - - + @Query(value = "select p from Permission p " + + "inner join RolePermission rp on p.id=rp.permissionId " + + "inner join Role r on rp.roleId=r.id " + + "inner join AccountRole ar on r.id=ar.roleId " + + "inner join Account a on ar.accountId=a.id " + + "where a.username=:username " + + "and p.applicationId = :applicationId " + + "and (:type is null or p.type=:type) " + + "and p.status='1' and r.status='1' and a.status='1' and a.enabled=1 ") + public List selectAccountRolePermissionByUsername(@Param("username") String username, @Param("applicationId") String applicationId, @Param("type") String type); + + @Query(value = "select p from Permission p " + + "inner join RolePermission rp on p.id=rp.permissionId " + + "inner join Role r on rp.roleId=r.id " + + "inner join GroupRole gr on r.id=gr.roleId " + + "inner join Group_ g on gr.groupId=g.id " + + "inner join AccountGroup ag on g.id=ag.groupId " + + "inner join Account a on ag.accountId=a.id " + + "where a.username=:username " + + "and p.applicationId = :applicationId " + + "and (:type is null or p.type=:type) " + + "and p.status='1' and r.status='1' and g.status='1' and a.status='1' and a.enabled=1 ") + public List selectAccountGroupRolePermissionByUsername(@Param("username") String username, @Param("applicationId") String applicationId, @Param("type") String type); - public default List selectList(boolean loadAll, int pageIndex, int pageSize, Map mapBean, Map orderBy) { - - Specification spec = convertToSpec(mapBean); - - if (loadAll) { - pageIndex = 0; - pageSize = Integer.MAX_VALUE; - } - - Sort sort = convertToSort(orderBy); - - if (sort == null) { - return this.findAll(spec); - } else { - return this.findAll(spec, sort); - } - } + @Query(value = "select p from Permission p " + + "inner join RolePermission rp on p.id=rp.permissionId " + + "inner join Role r on rp.roleId=r.id " + + "inner join AccountRole ar on r.id=ar.roleId " + + "inner join Account a on ar.accountId=a.id " + + "where a.username=:username " + + "and (:type is null or p.type=:type) " + + "and p.status='1' and r.status='1' and a.status='1' and a.enabled=1 ") + public List selectAccountRolePermissionByUsername(@Param("username") String username, @Param("type") String type); + + @Query(value = "select p from Permission p " + + "inner join RolePermission rp on p.id=rp.permissionId " + + "inner join Role r on rp.roleId=r.id " + + "inner join GroupRole gr on r.id=gr.roleId " + + "inner join Group_ g on gr.groupId=g.id " + + "inner join AccountGroup ag on g.id=ag.groupId " + + "inner join Account a on ag.accountId=a.id " + + "where a.username=:username " + + "and (:type is null or p.type=:type) " + + "and p.status='1' and r.status='1' and g.status='1' and a.status='1' and a.enabled=1 ") + public List selectAccountGroupRolePermissionByUsername(@Param("username") String username, @Param("type") String type); } diff --git a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/repo/RoleRepository.java b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/repo/RoleRepository.java index f9ed2db..5853b26 100644 --- a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/repo/RoleRepository.java +++ b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/repo/RoleRepository.java @@ -143,16 +143,4 @@ public interface RoleRepository extends BaseJpaRepository { + "and r.status='1' and g.status='1' and a.status='1' and a.enabled=1 ") public List selectAccountGroupRoleByUsername(@Param("username") String username); - public default List selectByUsername(String username) { - List roles = new ArrayList(); - - List userRoles = selectAccountRoleByUsername(username); - roles.addAll(userRoles); - - List userGroupRoles = selectAccountGroupRoleByUsername(username); - roles.addAll(userGroupRoles); - - return roles; - } - } diff --git a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/AccountService.java b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/AccountService.java index ece1cda..b0cad6c 100644 --- a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/AccountService.java +++ b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/AccountService.java @@ -196,4 +196,8 @@ public class AccountService extends ABaseService { return accountRoles; } + + public Account selectByUsername(String username) { + return accountRepository.selectByUsername(username); + } } diff --git a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/PermissionService.java b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/PermissionService.java index ead21b9..ff500bf 100644 --- a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/PermissionService.java +++ b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/PermissionService.java @@ -1,12 +1,14 @@ package com.supwisdom.institute.backend.base.domain.service; import java.util.ArrayList; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -50,19 +52,57 @@ public class PermissionService extends ABaseService selectApplicationPermissionList() { + Map mapBean = new HashMap(); + mapBean.put("type", Permission.TYPE_APPLICATION); + + return permissionRepository.selectList(true, -1, -1, mapBean, null); + } - public PermissionTreeNode selectPermissionTree(Map mapBean) { + public PermissionTreeNode selectPermissionTree(String applicationId, String type) { + + Map mapBean = new HashMap(); + mapBean.put("type", type); - Permission applicationPermission = this.selectApplicationPermission(); + String rootTreeNodeId = "0"; - Map parentTreeNode = new LinkedHashMap(); + List permissions = new ArrayList(); - PermissionTreeNode rootTreeNode = EntityUtils.copy(applicationPermission, new PermissionTreeNode()); - rootTreeNode.setChildren(new ArrayList()); + if (StringUtils.isBlank(applicationId)) { + Permission rootPermission = new Permission(); + rootPermission.setId(Permission.ROOT_PARENT_ID); + rootPermission.setCode("root"); + rootPermission.setName("根"); + + permissions.add(rootPermission); + rootTreeNodeId = rootPermission.getId(); + + List applicationPermissions = this.selectApplicationPermissionList(); + permissions.addAll(applicationPermissions); + } else { + Permission applicationPermission = permissionRepository.selectById(applicationId); // this.selectApplicationPermissionByCode(applicationCode); + if (applicationPermission == null) { + return null; + } + + permissions.add(applicationPermission); + rootTreeNodeId = applicationPermission.getId(); + } - parentTreeNode.put(rootTreeNode.getId(), rootTreeNode); + List menuPermissions = permissionRepository.selectList(true, -1, -1, mapBean, null); + permissions.addAll(menuPermissions); + + return convertPermissionTree(permissions, rootTreeNodeId); + } + + private PermissionTreeNode convertPermissionTree(List permissions, String rootTreeNodeId) { + if (permissions == null || permissions.size() == 0) { + return null; + } + + Map parentTreeNode = new LinkedHashMap(); - List permissions = permissionRepository.selectList(true, -1, -1, mapBean, null); for (Permission permission : permissions) { PermissionTreeNode treeNode = EntityUtils.copy(permission, new PermissionTreeNode()); treeNode.setChildren(new ArrayList()); @@ -81,7 +121,91 @@ public class PermissionService extends ABaseService example = Example.of(probe, matcher); +// +// Optional o = permissionRepository.findOne(example); +// +// if (o.isPresent()) { +// return o.get(); +// } +// +// return null; +// } + + + public List selectByUsername(String username, String applicationId, String type) { + List permissions = new ArrayList(); + +// Permission applicationPermission = permissionRepository.selectById(applicationId); +// if (applicationPermission == null) { +// return permissions; +// } +// +// int lft = applicationPermission.getLft(); +// int rgt = applicationPermission.getRgt(); + + if (StringUtils.isBlank(applicationId)) { + List accountRolePermissions = permissionRepository.selectAccountRolePermissionByUsername(username, type); + permissions.addAll(accountRolePermissions); + + List accountGroupRolePermissions = permissionRepository.selectAccountGroupRolePermissionByUsername(username, type); + permissions.addAll(accountGroupRolePermissions); + } else { + List accountRolePermissions = permissionRepository.selectAccountRolePermissionByUsername(username, applicationId, type); + permissions.addAll(accountRolePermissions); + + List accountGroupRolePermissions = permissionRepository.selectAccountGroupRolePermissionByUsername(username, applicationId, type); + permissions.addAll(accountGroupRolePermissions); + } + + return EntityUtils.distinctList(permissions); + } + + @Deprecated + public PermissionTreeNode selectPermissionTreeByUsername(String username, String applicationId, String type) { + String rootTreeNodeId = "0"; + + List permissions = new ArrayList(); + + if (StringUtils.isBlank(applicationId)) { + Permission rootPermission = new Permission(); + rootPermission.setId(Permission.ROOT_PARENT_ID); + rootPermission.setCode("root"); + rootPermission.setName("根"); + + permissions.add(rootPermission); + rootTreeNodeId = rootPermission.getId(); + + List applicationPermissions = this.selectApplicationPermissionList(); + permissions.addAll(applicationPermissions); + } else { + Permission applicationPermission = permissionRepository.selectById(applicationId); // this.selectApplicationPermissionByCode(applicationCode); + if (applicationPermission == null) { + return null; + } + + permissions.add(applicationPermission); + rootTreeNodeId = applicationPermission.getId(); + } + + List menuPermissions = this.selectByUsername(username, applicationId, type); + permissions.addAll(menuPermissions); + + return convertPermissionTree(permissions, rootTreeNodeId); } } diff --git a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/RoleService.java b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/RoleService.java index 403927f..c66e3ff 100644 --- a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/RoleService.java +++ b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/RoleService.java @@ -1,5 +1,6 @@ package com.supwisdom.institute.backend.base.domain.service; +import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -19,6 +20,7 @@ import com.supwisdom.institute.backend.base.domain.repo.AccountRoleRepository; import com.supwisdom.institute.backend.base.domain.repo.GroupRoleRepository; import com.supwisdom.institute.backend.base.domain.repo.RolePermissionRepository; import com.supwisdom.institute.backend.base.domain.repo.RoleRepository; +import com.supwisdom.institute.backend.common.framework.entity.EntityUtils; import com.supwisdom.institute.backend.common.framework.service.ABaseService; import com.supwisdom.institute.backend.common.util.MapBeanUtils; @@ -246,4 +248,21 @@ public class RoleService extends ABaseService { return rolePermissions; } + + + + public List selectByUsername(String username) { + List roles = new ArrayList(); + + List userRoles = roleRepository.selectAccountRoleByUsername(username); + roles.addAll(userRoles); + + List userGroupRoles = roleRepository.selectAccountGroupRoleByUsername(username); + roles.addAll(userGroupRoles); + + roles = EntityUtils.distinctList(roles); + + return roles; + } + } -- 2.17.1