refactor: 优化代码结构,完善资源(API)访问控制
author刘洪青 <hongqing.liu@supwisdom.com>
Sun, 29 Sep 2019 07:06:35 +0000 (15:06 +0800)
committer刘洪青 <hongqing.liu@supwisdom.com>
Sun, 29 Sep 2019 07:06:35 +0000 (15:06 +0800)
168 files changed:
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminAccountController.java
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminApplicationController.java
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminConfigController.java
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminGroupController.java
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminMenuController.java
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminOperationController.java
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminPermissionController.java
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminResourceController.java
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminRoleController.java
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminRouteController.java
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/authn/AuthnController.java
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/authn/AuthnResourceController.java [new file with mode: 0644]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountCreateRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/AccountCreateRequest.java with 88% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountDeleteBatchRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/AccountDeleteBatchRequest.java with 83% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountQueryRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/AccountQueryRequest.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountRelateGroupsRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/AccountRelateGroupsRequest.java with 86% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountRelateRolesRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/AccountRelateRolesRequest.java with 86% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountRelatedGroupsRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/AccountRelatedGroupsRequest.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountRelatedRolesRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/AccountRelatedRolesRequest.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountUpdateRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/AccountUpdateRequest.java with 89% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ApplicationCreateRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/ApplicationCreateRequest.java with 88% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ApplicationDeleteBatchRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/ApplicationDeleteBatchRequest.java with 83% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ApplicationQueryRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/ApplicationQueryRequest.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ApplicationUpdateRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/ApplicationUpdateRequest.java with 89% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ConfigCreateRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/ConfigCreateRequest.java with 87% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ConfigQueryRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/ConfigQueryRequest.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ConfigUpdateRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/ConfigUpdateRequest.java with 89% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupCreateRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/GroupCreateRequest.java with 87% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupQueryRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/GroupQueryRequest.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupRelateAccountsRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/GroupRelateAccountsRequest.java with 86% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupRelateRolesRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/GroupRelateRolesRequest.java with 86% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupRelatedAccountsRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/GroupRelatedAccountsRequest.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupRelatedRolesRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/GroupRelatedRolesRequest.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupUpdateRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/GroupUpdateRequest.java with 89% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionCreateRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/PermissionCreateRequest.java with 73% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionDeleteBatchRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/PermissionDeleteBatchRequest.java with 83% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionQueryRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/PermissionQueryRequest.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionRelateResourcesRequest.java [new file with mode: 0644]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionRelatedResourcesRequest.java [new file with mode: 0644]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionUpdateRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/PermissionUpdateRequest.java with 80% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ResourceCreateRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/ResourceCreateRequest.java with 88% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ResourceQueryRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/ResourceQueryRequest.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ResourceUpdateRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/ResourceUpdateRequest.java with 89% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleCreateRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/RoleCreateRequest.java with 87% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleDeleteBatchRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/RoleDeleteBatchRequest.java with 83% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleQueryRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/RoleQueryRequest.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelateAccountsRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/RoleRelateAccountsRequest.java with 86% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelateGroupsRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/RoleRelateGroupsRequest.java with 86% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelatePermissionsRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/RoleRelatePermissionsRequest.java with 86% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelatedAccountsRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/RoleRelatedAccountsRequest.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelatedGroupsRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/RoleRelatedGroupsRequest.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelatedPermissionsRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/RoleRelatedPermissionsRequest.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleUpdateRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/RoleUpdateRequest.java with 89% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RouteCreateRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/RouteCreateRequest.java with 87% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RouteDeleteBatchRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/RouteDeleteBatchRequest.java with 83% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RouteQueryRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/RouteQueryRequest.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RouteUpdateRequest.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/request/RouteUpdateRequest.java with 89% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountCreateResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AccountCreateResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountDeleteBatchResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AccountDeleteBatchResponseData.java with 90% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountLoadResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AccountLoadResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountQueryResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AccountQueryResponseData.java with 96% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRelateGroupsResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AccountRelateGroupsResponseData.java with 89% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRelateRolesResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AccountRelateRolesResponseData.java with 89% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRelatedGroupsResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AccountRelatedGroupsResponseData.java with 96% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRelatedRolesResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AccountRelatedRolesResponseData.java with 96% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRemoveResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AccountRemoveResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountUpdateResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AccountUpdateResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationCreateResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/ApplicationCreateResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationDeleteBatchResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/ApplicationDeleteBatchResponseData.java with 90% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationLoadResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/ApplicationLoadResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationQueryResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/ApplicationQueryResponseData.java with 96% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationRemoveResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/ApplicationRemoveResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationUpdateResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/ApplicationUpdateResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigCreateResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/ConfigCreateResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigLoadResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/ConfigLoadResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigQueryResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/ConfigQueryResponseData.java with 92% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigRemoveResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/ConfigRemoveResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigUpdateResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/ConfigUpdateResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupCreateResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/GroupCreateResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupLoadResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/GroupLoadResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupQueryResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/GroupQueryResponseData.java with 96% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRelateAccountsResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/GroupRelateAccountsResponseData.java with 89% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRelateRolesResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/GroupRelateRolesResponseData.java with 89% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRelatedAccountsResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/GroupRelatedAccountsResponseData.java with 96% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRelatedRolesResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/GroupRelatedRolesResponseData.java with 96% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRemoveResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/GroupRemoveResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupUpdateResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/GroupUpdateResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionCreateResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/PermissionCreateResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionDeleteBatchResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/PermissionDeleteBatchResponseData.java with 90% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionLoadResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/PermissionLoadResponseData.java with 65% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionQueryResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/PermissionQueryResponseData.java with 96% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionRelateResourcesResponseData.java [new file with mode: 0644]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionRelatedResourcesResponseData.java [new file with mode: 0644]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionRemoveResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/PermissionRemoveResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionTreeResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/PermissionTreeResponseData.java with 90% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionUpdateResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/PermissionUpdateResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceCreateResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/ResourceCreateResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceLoadResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/ResourceLoadResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceQueryResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/ResourceQueryResponseData.java with 96% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceRemoveResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/ResourceRemoveResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceUpdateResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/ResourceUpdateResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleCreateResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RoleCreateResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleDeleteBatchResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RoleDeleteBatchResponseData.java with 90% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleLoadResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RoleLoadResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleQueryResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RoleQueryResponseData.java with 96% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelateAccountsResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RoleRelateAccountsResponseData.java with 89% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelateGroupsResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RoleRelateGroupsResponseData.java with 89% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelatePermissionsResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RoleRelatePermissionsResponseData.java with 90% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelatedAccountsResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RoleRelatedAccountsResponseData.java with 96% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelatedGroupsResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RoleRelatedGroupsResponseData.java with 96% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelatedPermissionsResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RoleRelatedPermissionsResponseData.java with 96% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRemoveResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RoleRemoveResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleUpdateResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RoleUpdateResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteCreateResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RouteCreateResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteDeleteBatchResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RouteDeleteBatchResponseData.java with 90% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteLoadResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RouteLoadResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteQueryResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RouteQueryResponseData.java with 96% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteRemoveResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RouteRemoveResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteUpdateResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/RouteUpdateResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnAccountPermissionsResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AuthnAccountPermissionsResponseData.java with 90% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnAccountResourcesResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AuthnAccountResourcesResponseData.java with 90% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnAccountResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AuthnAccountResponseData.java with 89% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnAccountRolesResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AuthnAccountRolesResponseData.java with 90% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnApplicationsResponseData.java [new file with mode: 0644]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnPermissionRoleListResponseData.java [new file with mode: 0644]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnResourceRoleListResponseData.java [moved from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AuthnResourceRoleListResponseData.java with 91% similarity]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnRolesResponseData.java [new file with mode: 0644]
base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnRoutesResponseData.java [new file with mode: 0644]
base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/entity/Permission.java
base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/entity/PermissionResource.java [new file with mode: 0644]
base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/entity/Resource.java
base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/model/PermissionRoleSet.java [new file with mode: 0644]
base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/model/ResourceRoleSet.java
base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/repo/PermissionResourceRepository.java [new file with mode: 0644]
base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/repo/RoleRepository.java
base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/PermissionService.java
base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/ResourceService.java
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/autorefesh/base/InMemeryPermissionRoleSetAutoRefresh.java [new file with mode: 0644]
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/controller/me/MeController.java
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/controller/open/OpenController.java [new file with mode: 0644]
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/controller/open/OpenSyncController.java [new file with mode: 0644]
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/base/Application.java [new file with mode: 0644]
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/base/Permission.java
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/base/PermissionRoleSet.java [new file with mode: 0644]
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/base/ResourceRoleSet.java [new file with mode: 0644]
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/me/GrantedMenu.java
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/open/Menu.java [new file with mode: 0644]
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/open/SyncRoleModel.java [new file with mode: 0644]
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/remote/base/v1/authn/AuthnRemoteFallbackFactory.java [moved from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/remote/base/v1/authn/AuthnAccountRemoteFallbackFactory.java with 62% similarity]
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/remote/base/v1/authn/AuthnRemoteFeignClient.java [moved from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/remote/base/v1/authn/AuthnAccountRemoteFeignClient.java with 74% similarity]
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/service/base/AuthnAccountService.java [deleted file]
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/service/base/AuthnService.java [new file with mode: 0644]
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/vo/open/response/data/MenusResponseData.java [new file with mode: 0644]
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/vo/open/response/data/OpenSyncRolesResponseData.java [new file with mode: 0644]
common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/BaseJpaRepository.java
common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/service/ABaseService.java
gateway/src/main/java/com/supwisdom/institute/backend/gateway/authn/model/Permission.java
gateway/src/main/java/com/supwisdom/institute/backend/gateway/authn/model/PermissionRoleSet.java [new file with mode: 0644]
gateway/src/main/java/com/supwisdom/institute/backend/gateway/authn/model/ResourceRoleSet.java [new file with mode: 0644]
gateway/src/main/java/com/supwisdom/institute/backend/gateway/authn/model/Route.java [new file with mode: 0644]
gateway/src/main/java/com/supwisdom/institute/backend/gateway/authn/remote/configuration/AuthnRestTemplateConfig.java [moved from gateway/src/main/java/com/supwisdom/institute/backend/gateway/authn/remote/configuration/AuthnAccountRestTemplateConfig.java with 70% similarity]
gateway/src/main/java/com/supwisdom/institute/backend/gateway/authn/remote/web/client/AuthnRemoteRestTemplate.java [moved from gateway/src/main/java/com/supwisdom/institute/backend/gateway/authn/remote/web/client/AuthnAccountRemoteRestTemplate.java with 64% similarity]
gateway/src/main/java/com/supwisdom/institute/backend/gateway/authn/service/AuthnService.java [moved from gateway/src/main/java/com/supwisdom/institute/backend/gateway/authn/service/AuthnAccountService.java with 50% similarity]
gateway/src/main/java/com/supwisdom/institute/backend/gateway/filter/AccessControlGlobalFilter.java
gateway/src/main/java/com/supwisdom/institute/backend/gateway/security/core/userdetails/MyUserDetailsService.java
gateway/src/main/resources/application.yml
sql/base.sql

index 8d6e168..2b2efb3 100644 (file)
@@ -22,24 +22,24 @@ 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.v1.vo.request.AccountCreateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.AccountDeleteBatchRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.AccountQueryRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.AccountRelateGroupsRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.AccountRelateRolesRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.AccountRelatedGroupsRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.AccountRelatedRolesRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.AccountUpdateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.AccountCreateResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.AccountDeleteBatchResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.AccountLoadResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.AccountQueryResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.AccountRelateGroupsResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.AccountRelateRolesResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.AccountRelatedGroupsResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.AccountRelatedRolesResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.AccountRemoveResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.AccountUpdateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.AccountCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.AccountDeleteBatchRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.AccountQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.AccountRelateGroupsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.AccountRelateRolesRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.AccountRelatedGroupsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.AccountRelatedRolesRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.AccountUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountDeleteBatchResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountRelateGroupsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountRelateRolesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountRelatedGroupsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountRelatedRolesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountRemoveResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountUpdateResponseData;
 import com.supwisdom.institute.backend.base.domain.entity.Account;
 import com.supwisdom.institute.backend.base.domain.entity.AccountGroup;
 import com.supwisdom.institute.backend.base.domain.entity.AccountRole;
index 36067de..02fb24b 100644 (file)
@@ -20,16 +20,16 @@ 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.v1.vo.request.ApplicationCreateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.ApplicationDeleteBatchRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.ApplicationQueryRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.ApplicationUpdateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.ApplicationCreateResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.ApplicationDeleteBatchResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.ApplicationLoadResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.ApplicationQueryResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.ApplicationRemoveResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.ApplicationUpdateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ApplicationCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ApplicationDeleteBatchRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ApplicationQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ApplicationUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ApplicationCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ApplicationDeleteBatchResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ApplicationLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ApplicationQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ApplicationRemoveResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ApplicationUpdateResponseData;
 import com.supwisdom.institute.backend.base.domain.entity.Application;
 import com.supwisdom.institute.backend.base.domain.service.ApplicationService;
 import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
index cd8d261..4b38209 100644 (file)
@@ -19,13 +19,13 @@ 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.v1.vo.request.ConfigCreateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.ConfigQueryRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.ConfigUpdateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.ConfigCreateResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.ConfigLoadResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.ConfigQueryResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.ConfigUpdateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ConfigCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ConfigQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ConfigUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ConfigCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ConfigLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ConfigQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ConfigUpdateResponseData;
 import com.supwisdom.institute.backend.base.domain.entity.Config;
 import com.supwisdom.institute.backend.base.domain.exception.ConfigException;
 import com.supwisdom.institute.backend.base.domain.service.ConfigService;
index a15c763..c9a28d7 100644 (file)
@@ -21,22 +21,22 @@ 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.v1.vo.request.GroupCreateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.GroupQueryRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.GroupRelateAccountsRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.GroupRelateRolesRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.GroupRelatedAccountsRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.GroupRelatedRolesRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.GroupUpdateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.GroupCreateResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.GroupLoadResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.GroupQueryResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.GroupRelateAccountsResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.GroupRelateRolesResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.GroupRelatedAccountsResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.GroupRelatedRolesResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.GroupRemoveResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.GroupUpdateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.GroupCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.GroupQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.GroupRelateAccountsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.GroupRelateRolesRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.GroupRelatedAccountsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.GroupRelatedRolesRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.GroupUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupRelateAccountsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupRelateRolesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupRelatedAccountsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupRelatedRolesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupRemoveResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupUpdateResponseData;
 import com.supwisdom.institute.backend.base.domain.entity.AccountGroup;
 import com.supwisdom.institute.backend.base.domain.entity.Group;
 import com.supwisdom.institute.backend.base.domain.entity.GroupRole;
index a32a057..554726c 100644 (file)
@@ -1,7 +1,9 @@
 package com.supwisdom.institute.backend.base.api.v1.controller.admin;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
@@ -22,18 +24,19 @@ 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.v1.vo.request.PermissionCreateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.PermissionDeleteBatchRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.PermissionQueryRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.PermissionUpdateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.PermissionCreateResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.PermissionDeleteBatchResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.PermissionLoadResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.PermissionQueryResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.PermissionRemoveResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.PermissionTreeResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.PermissionUpdateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionDeleteBatchRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionDeleteBatchResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionRemoveResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionTreeResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionUpdateResponseData;
 import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.base.domain.entity.PermissionResource;
 import com.supwisdom.institute.backend.base.domain.model.PermissionTreeNode;
 import com.supwisdom.institute.backend.base.domain.service.PermissionService;
 import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
@@ -88,7 +91,16 @@ public class AdminMenuController {
       throw new RuntimeException("exception.get.domain.type.error");
     }
     
-    PermissionLoadResponseData data = PermissionLoadResponseData.of(permission);
+    List<String> resourceIds = new ArrayList<>();
+    
+    Map<String, Object> mapBean = new HashMap<>();
+    mapBean.put("permissionId", id);
+    Page<PermissionResource> permissionResources = permissionService.selectPermissionResources(true, 0, 0, mapBean);
+    for (PermissionResource permissionResource : permissionResources) {
+      resourceIds.add(permissionResource.getResourceId());
+    }
+    
+    PermissionLoadResponseData data = PermissionLoadResponseData.of(permission, resourceIds);
 
     return new DefaultApiResponse<PermissionLoadResponseData>(data);
   }
index aa282c6..e84e2e0 100644 (file)
@@ -2,7 +2,10 @@ package com.supwisdom.institute.backend.base.api.v1.controller.admin;
 
 import io.swagger.annotations.Api;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -21,15 +24,16 @@ 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.v1.vo.request.PermissionCreateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.PermissionQueryRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.PermissionUpdateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.PermissionCreateResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.PermissionLoadResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.PermissionQueryResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.PermissionRemoveResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.PermissionUpdateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionRemoveResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionUpdateResponseData;
 import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.base.domain.entity.PermissionResource;
 import com.supwisdom.institute.backend.base.domain.service.PermissionService;
 import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
 import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
@@ -82,8 +86,17 @@ public class AdminOperationController {
     if (!Permission.TYPE_OPERATION.equals(permission.getType())) {
       throw new RuntimeException("exception.get.domain.type.error");
     }
+
+    List<String> resourceIds = new ArrayList<>();
+    
+    Map<String, Object> mapBean = new HashMap<>();
+    mapBean.put("permissionId", id);
+    Page<PermissionResource> permissionResources = permissionService.selectPermissionResources(true, 0, 0, mapBean);
+    for (PermissionResource permissionResource : permissionResources) {
+      resourceIds.add(permissionResource.getResourceId());
+    }
     
-    PermissionLoadResponseData data = PermissionLoadResponseData.of(permission);
+    PermissionLoadResponseData data = PermissionLoadResponseData.of(permission, resourceIds);
 
     return new DefaultApiResponse<PermissionLoadResponseData>(data);
   }
index 4181f3e..a415095 100644 (file)
@@ -1,22 +1,30 @@
 package com.supwisdom.institute.backend.base.api.v1.controller.admin;
 
 import java.util.HashMap;
-import java.util.Map;
 
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
 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.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 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.v1.vo.response.PermissionTreeResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionRelateResourcesRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionRelatedResourcesRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionRelateResourcesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionRelatedResourcesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionTreeResponseData;
 import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.base.domain.entity.PermissionResource;
 import com.supwisdom.institute.backend.base.domain.model.PermissionTreeNode;
 import com.supwisdom.institute.backend.base.domain.service.PermissionService;
 import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
@@ -41,5 +49,60 @@ public class AdminPermissionController {
 
     return new DefaultApiResponse<PermissionTreeResponseData>(data);
   }
-  
+
+  @RequestMapping(method = RequestMethod.GET, path = "/{id}/resources", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  @ResponseBody
+  public DefaultApiResponse<PermissionRelatedResourcesResponseData> permissionResources(
+      @PathVariable("id") String id, 
+      PermissionRelatedResourcesRequest request) {
+
+    if (id == null || id.length() == 0) {
+      throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+    }
+
+    Permission permission = permissionService.selectById(id);
+
+    if (permission == null) {
+      throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+    }
+
+    if (request.getMapBean() == null) {
+      request.setMapBean(new HashMap<String, Object>());
+    }
+    request.getMapBean().put("permissionId", permission.getId());
+
+    Page<PermissionResource> page = permissionService.selectPermissionResources(
+        request.isLoadAll(),
+        request.getPageIndex(),
+        request.getPageSize(), 
+        request.getMapBean());
+
+    PermissionRelatedResourcesResponseData data = PermissionRelatedResourcesResponseData.of(request).build(page);
+
+    return new DefaultApiResponse<PermissionRelatedResourcesResponseData>(data);
+  }
+
+  @RequestMapping(method = RequestMethod.POST, path = "/{id}/resources", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  @ResponseBody
+  public DefaultApiResponse<PermissionRelateResourcesResponseData> relateResources(
+      @PathVariable("id") String id, 
+      @RequestBody PermissionRelateResourcesRequest permissionResources) {
+
+    if (id == null || id.length() == 0) {
+      throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+    }
+
+    Permission permission = permissionService.selectById(id);
+
+    if (permission == null) {
+      throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+    }
+
+    permissionService.relatePermissionResources(permission, permissionResources.getPermissionResources());
+
+    PermissionRelateResourcesResponseData data = PermissionRelateResourcesResponseData.of("info.relate.success");
+
+    return new DefaultApiResponse<PermissionRelateResourcesResponseData>(data);
+  }
+
 }
index a1aca6b..5594269 100644 (file)
@@ -18,14 +18,14 @@ 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.v1.vo.request.ResourceCreateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.ResourceQueryRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.ResourceUpdateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.ResourceCreateResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.ResourceLoadResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.ResourceQueryResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.ResourceRemoveResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.ResourceUpdateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ResourceCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ResourceQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ResourceUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ResourceCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ResourceLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ResourceQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ResourceRemoveResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ResourceUpdateResponseData;
 import com.supwisdom.institute.backend.base.domain.entity.Resource;
 import com.supwisdom.institute.backend.base.domain.service.ResourceService;
 import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
index 847b676..b45bc25 100644 (file)
@@ -22,28 +22,28 @@ 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.v1.vo.request.RoleCreateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.RoleDeleteBatchRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.RoleQueryRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.RoleRelateAccountsRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.RoleRelateGroupsRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.RoleRelatePermissionsRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.RoleRelatedAccountsRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.RoleRelatedGroupsRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.RoleRelatedPermissionsRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.RoleUpdateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RoleCreateResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RoleDeleteBatchResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RoleLoadResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RoleQueryResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RoleRelateAccountsResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RoleRelateGroupsResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RoleRelatePermissionsResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RoleRelatedAccountsResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RoleRelatedGroupsResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RoleRelatedPermissionsResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RoleRemoveResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RoleUpdateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleDeleteBatchRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleRelateAccountsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleRelateGroupsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleRelatePermissionsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleRelatedAccountsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleRelatedGroupsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleRelatedPermissionsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleDeleteBatchResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleRelateAccountsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleRelateGroupsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleRelatePermissionsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleRelatedAccountsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleRelatedGroupsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleRelatedPermissionsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleRemoveResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleUpdateResponseData;
 import com.supwisdom.institute.backend.base.domain.entity.AccountRole;
 import com.supwisdom.institute.backend.base.domain.entity.GroupRole;
 import com.supwisdom.institute.backend.base.domain.entity.Role;
index 06758c1..a52334d 100644 (file)
@@ -20,16 +20,16 @@ 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.v1.vo.request.RouteCreateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.RouteDeleteBatchRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.RouteQueryRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.request.RouteUpdateRequest;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RouteCreateResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RouteDeleteBatchResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RouteLoadResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RouteQueryResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RouteRemoveResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.RouteUpdateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RouteCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RouteDeleteBatchRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RouteQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RouteUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RouteCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RouteDeleteBatchResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RouteLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RouteQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RouteRemoveResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RouteUpdateResponseData;
 import com.supwisdom.institute.backend.base.domain.entity.Route;
 import com.supwisdom.institute.backend.base.domain.service.RouteService;
 import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
index 291a80b..483d55f 100644 (file)
@@ -1,6 +1,8 @@
 package com.supwisdom.institute.backend.base.api.v1.controller.authn;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
@@ -16,20 +18,29 @@ 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.v1.vo.response.AuthnAccountPermissionsResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.AuthnAccountResourcesResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.AuthnAccountResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.AuthnAccountRolesResponseData;
-import com.supwisdom.institute.backend.base.api.v1.vo.response.AuthnResourceRoleListResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnAccountPermissionsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnAccountResourcesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnAccountResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnAccountRolesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnApplicationsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnPermissionRoleListResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnResourceRoleListResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnRolesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnRoutesResponseData;
 import com.supwisdom.institute.backend.base.domain.entity.Account;
+import com.supwisdom.institute.backend.base.domain.entity.Application;
 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.entity.Route;
+import com.supwisdom.institute.backend.base.domain.model.PermissionRoleSet;
 import com.supwisdom.institute.backend.base.domain.model.ResourceRoleSet;
 import com.supwisdom.institute.backend.base.domain.service.AccountService;
+import com.supwisdom.institute.backend.base.domain.service.ApplicationService;
 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.base.domain.service.RouteService;
 import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
 
 @Api(value = "BaseAuthn", tags = { "BaseAuthn" }, description = "认证授权接口")
@@ -45,10 +56,16 @@ public class AuthnController {
   private RoleService roleService;
   
   @Autowired
-  private PermissionService permissionService; 
+  private ApplicationService applicationService;
 
   @Autowired
-  private ResourceService resourceService; 
+  private PermissionService permissionService;
+
+  @Autowired
+  private ResourceService resourceService;
+
+  @Autowired
+  private RouteService routeService;
 
   @GetMapping(path = "/{username}/account", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
   @ResponseStatus(value = HttpStatus.OK)
@@ -190,18 +207,111 @@ public class AuthnController {
     return new DefaultApiResponse<AuthnAccountResourcesResponseData>(data);
   }
   
-  @GetMapping(path = "/resources", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+//  @GetMapping(path = "/resources", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+//  @ResponseStatus(value = HttpStatus.OK)
+//  @ResponseBody
+//  public DefaultApiResponse<AuthnResourceRoleListResponseData> applicationResources(
+//      @RequestParam(name = "applicationId", required = false) String applicationId) {
+//
+//    List<ResourceRoleSet> resourceRoleSets = resourceService.selectByApplication(applicationId);
+//    
+//    AuthnResourceRoleListResponseData data = AuthnResourceRoleListResponseData.of(resourceRoleSets);
+//
+//    return new DefaultApiResponse<AuthnResourceRoleListResponseData>(data);
+//  }
+
+
+  @GetMapping(path = "/applications", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  @ResponseStatus(value = HttpStatus.OK)
+  @ResponseBody
+  public DefaultApiResponse<AuthnApplicationsResponseData> applications() {
+    
+    Map<String, Object> mapBean = new HashMap<>();
+    Map<String, String> orderBy = null;
+    
+    mapBean.put("status", "1");
+
+    List<Application> applications = applicationService.selectList(mapBean, orderBy);
+    
+    AuthnApplicationsResponseData data = AuthnApplicationsResponseData.of(applications);
+
+    return new DefaultApiResponse<AuthnApplicationsResponseData>(data);
+  }
+  
+  @GetMapping(path = "/roles", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  @ResponseStatus(value = HttpStatus.OK)
+  @ResponseBody
+  public DefaultApiResponse<AuthnRolesResponseData> roles() {
+    
+    Map<String, Object> mapBean = new HashMap<>();
+    Map<String, String> orderBy = null;
+    
+    mapBean.put("status", "1");
+
+    List<Role> roles = roleService.selectList(mapBean, orderBy);
+    
+    AuthnRolesResponseData data = AuthnRolesResponseData.of(roles);
+
+    return new DefaultApiResponse<AuthnRolesResponseData>(data);
+  }
+  
+  
+  @GetMapping(path = "/permissionRoleSets", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
   @ResponseStatus(value = HttpStatus.OK)
   @ResponseBody
-  public DefaultApiResponse<AuthnResourceRoleListResponseData> applicationResources(
+  public DefaultApiResponse<AuthnPermissionRoleListResponseData> permissionRoleSets(
       @RequestParam(name = "applicationId", required = false) String applicationId) {
+    
+    Map<String, Object> mapBean = new HashMap<>();
+    
+    mapBean.put("status", "1");
+    if (applicationId != null && !applicationId.isEmpty()) {
+      mapBean.put("applicationId", applicationId);
+    }
+    
+    List<PermissionRoleSet> permissionRoleSets = permissionService.selectPermissionRoleSet(mapBean);
+    
+    AuthnPermissionRoleListResponseData data = AuthnPermissionRoleListResponseData.of(permissionRoleSets);
 
-    List<ResourceRoleSet> resourceRoleSets = resourceService.selectByApplication(applicationId);
+    return new DefaultApiResponse<AuthnPermissionRoleListResponseData>(data);
+  }
+  
+  
+  @GetMapping(path = "/resourceRoleSets", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  @ResponseStatus(value = HttpStatus.OK)
+  @ResponseBody
+  public DefaultApiResponse<AuthnResourceRoleListResponseData> resourceRoleSets(
+      @RequestParam(name = "applicationId", required = false) String applicationId) {
+    
+    Map<String, Object> mapBean = new HashMap<>();
+    
+    mapBean.put("status", "1");
+    
+    List<ResourceRoleSet> resourceRoleSets = resourceService.selectResourceRoleSet(mapBean);
     
     AuthnResourceRoleListResponseData data = AuthnResourceRoleListResponseData.of(resourceRoleSets);
 
     return new DefaultApiResponse<AuthnResourceRoleListResponseData>(data);
   }
   
+  
+
+  @GetMapping(path = "/routes", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  @ResponseStatus(value = HttpStatus.OK)
+  @ResponseBody
+  public DefaultApiResponse<AuthnRoutesResponseData> routes() {
+    
+    Map<String, Object> mapBean = new HashMap<>();
+    Map<String, String> orderBy = null;
+    
+    mapBean.put("status", "1");
+
+    List<Route> routes = routeService.selectList(mapBean, orderBy);
+    
+    AuthnRoutesResponseData data = AuthnRoutesResponseData.of(routes);
+
+    return new DefaultApiResponse<AuthnRoutesResponseData>(data);
+  }
+  
 
 }
diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/authn/AuthnResourceController.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/authn/AuthnResourceController.java
new file mode 100644 (file)
index 0000000..f7e6e5a
--- /dev/null
@@ -0,0 +1,15 @@
+package com.supwisdom.institute.backend.base.api.v1.controller.authn;
+
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Api(value = "BaseAuthnResource", tags = { "BaseAuthnResource" }, description = "资源接口(认证、授权用)")
+@Slf4j
+@RestController
+@RequestMapping("/v1/authn/resource")
+public class AuthnResourceController {
+
+}
@@ -1,4 +1,9 @@
-package com.supwisdom.institute.backend.base.api.v1.vo.request;
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+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.entity.EntityUtils;
@@ -14,6 +19,10 @@ public class PermissionCreateRequest extends Permission implements IApiCreateReq
    */
   private static final long serialVersionUID = 8247861768124918116L;
 
+  @Getter
+  @Setter
+  private List<String> resourceIds;
+
   public Permission getEntity() {
     return EntityUtils.copy(this, new Permission());
   }
diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionRelateResourcesRequest.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionRelateResourcesRequest.java
new file mode 100644 (file)
index 0000000..ae09876
--- /dev/null
@@ -0,0 +1,22 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
+
+import com.supwisdom.institute.backend.base.domain.entity.PermissionResource;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiRequest;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class PermissionRelateResourcesRequest implements IApiRequest {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -7016517754275684031L;
+
+  @Getter
+  @Setter
+  private List<PermissionResource> permissionResources;
+
+}
diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionRelatedResourcesRequest.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionRelatedResourcesRequest.java
new file mode 100644 (file)
index 0000000..4419071
--- /dev/null
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class PermissionRelatedResourcesRequest implements IApiQueryRequest {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -7634304817036292579L;
+
+  @Getter
+  @Setter
+  private boolean loadAll = false;
+  @Getter
+  @Setter
+  private int pageIndex = 0;
+  @Getter
+  @Setter
+  private int pageSize = 20;
+  @Getter
+  @Setter
+  @ApiModelProperty(hidden = true)
+  private Map<String, Object> mapBean;
+  @Getter
+  @Setter
+  @ApiModelProperty(hidden = true)
+  private Map<String, String> orderBy;
+
+}
@@ -1,4 +1,6 @@
-package com.supwisdom.institute.backend.base.api.v1.vo.request;
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
 
 import com.supwisdom.institute.backend.base.domain.entity.Permission;
 import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
@@ -21,6 +23,10 @@ public class PermissionUpdateRequest extends Permission implements IApiUpdateReq
   @Setter
   private String id;
 
+  @Getter
+  @Setter
+  private List<String> resourceIds;
+
   public Permission getEntity() {
     return EntityUtils.copy(this, new Permission());
   }
@@ -1,4 +1,4 @@
-package com.supwisdom.institute.backend.base.api.v1.vo.response;
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -8,7 +8,7 @@ import java.util.Map;
 
 import org.springframework.data.domain.Page;
 
-import com.supwisdom.institute.backend.base.api.v1.vo.request.ConfigQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ConfigQueryRequest;
 import com.supwisdom.institute.backend.base.domain.entity.Config;
 import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
 
@@ -1,4 +1,6 @@
-package com.supwisdom.institute.backend.base.api.v1.vo.response;
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import java.util.List;
 
 import com.supwisdom.institute.backend.base.domain.entity.Permission;
 import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
@@ -21,13 +23,22 @@ public class PermissionLoadResponseData extends Permission implements IApiLoadRe
   @Setter
   private String id;
 
+  @Getter
+  @Setter
+  private List<String> resourceIds;
+
+  
   private PermissionLoadResponseData() {
 
   }
 
-  public static PermissionLoadResponseData of(Permission entity) {
+  public static PermissionLoadResponseData of(Permission entity, List<String> resourceIds) {
     PermissionLoadResponseData data = new PermissionLoadResponseData();
-    return EntityUtils.copy(entity, data);
+
+    EntityUtils.copy(entity, data);
+    data.setResourceIds(resourceIds);
+    
+    return data;
   }
 
 }
diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionRelateResourcesResponseData.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionRelateResourcesResponseData.java
new file mode 100644 (file)
index 0000000..e895aac
--- /dev/null
@@ -0,0 +1,29 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class PermissionRelateResourcesResponseData implements IApiResponseData {
+  
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 5576856617389758687L;
+
+  @Getter
+  @Setter
+  private String message;
+
+  public PermissionRelateResourcesResponseData(String message) {
+    this.message = message;
+  }
+
+  public static PermissionRelateResourcesResponseData of(String message) {
+    PermissionRelateResourcesResponseData data = new PermissionRelateResourcesResponseData(message);
+    
+    return data;
+  }
+
+}
diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionRelatedResourcesResponseData.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionRelatedResourcesResponseData.java
new file mode 100644 (file)
index 0000000..969d3c6
--- /dev/null
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.domain.entity.PermissionResource;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class PermissionRelatedResourcesResponseData implements IApiQueryResponseData<PermissionResource> {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -2095633445866557991L;
+
+  private PermissionRelatedResourcesResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+    this.loadAll = loadAll;
+    this.pageIndex = pageIndex;
+    this.pageSize = pageSize;
+    this.mapBean = mapBean;
+    this.orderBy = orderBy;
+  }
+
+  public static PermissionRelatedResourcesResponseData of(IApiQueryRequest queryRequest) {
+    PermissionRelatedResourcesResponseData configQueryResponse = new PermissionRelatedResourcesResponseData(
+        queryRequest.isLoadAll(), 
+        queryRequest.getPageIndex(), 
+        queryRequest.getPageSize(), 
+        queryRequest.getMapBean(), 
+        queryRequest.getOrderBy()
+    );
+    
+    return configQueryResponse;
+  }
+  
+  public PermissionRelatedResourcesResponseData build(Page<PermissionResource> page) {
+    this.currentItemCount = page.getNumberOfElements();
+    this.pageCount = page.getTotalPages();
+    this.recordCount = page.getTotalElements();
+    this.items = page.getContent();
+
+    return this;
+  }
+
+  @Getter
+  private boolean loadAll;
+  @Getter
+  private int pageIndex;
+  @Getter
+  private int pageSize;
+  @Getter
+  private Map<String, Object> mapBean;
+  @Getter
+  private Map<String, String> orderBy;
+  
+  @Getter
+  @Setter
+  private int pageCount;
+  @Getter
+  @Setter
+  private long recordCount;
+  
+  @Getter
+  @Setter
+  private int currentItemCount;
+  
+  @Getter
+  @Setter
+  private List<PermissionResource> items;
+  
+}
diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnApplicationsResponseData.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnApplicationsResponseData.java
new file mode 100644 (file)
index 0000000..79dae74
--- /dev/null
@@ -0,0 +1,31 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.authn.response;
+
+import java.util.List;
+
+import com.supwisdom.institute.backend.base.domain.entity.Application;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class AuthnApplicationsResponseData implements IApiResponseData {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 277008963651011910L;
+
+  @Getter
+  @Setter
+  public List<Application> applications;
+  
+  
+  public static AuthnApplicationsResponseData of(List<Application> applications) {
+    AuthnApplicationsResponseData data = new AuthnApplicationsResponseData();
+    
+    data.setApplications(applications);
+    
+    return data;
+  }
+
+}
diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnPermissionRoleListResponseData.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnPermissionRoleListResponseData.java
new file mode 100644 (file)
index 0000000..bca4b9d
--- /dev/null
@@ -0,0 +1,30 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.authn.response;
+
+import java.util.List;
+
+import com.supwisdom.institute.backend.base.domain.model.PermissionRoleSet;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class AuthnPermissionRoleListResponseData implements IApiResponseData {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -1484993874632504947L;
+
+  @Getter
+  @Setter
+  public List<PermissionRoleSet> permissionRoleSets;
+  
+  public static AuthnPermissionRoleListResponseData of(List<PermissionRoleSet> permissionRoleSets) {
+    AuthnPermissionRoleListResponseData data = new AuthnPermissionRoleListResponseData();
+    
+    data.setPermissionRoleSets(permissionRoleSets);
+    
+    return data;
+  }
+
+}
diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnRolesResponseData.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnRolesResponseData.java
new file mode 100644 (file)
index 0000000..4f503ed
--- /dev/null
@@ -0,0 +1,31 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.authn.response;
+
+import java.util.List;
+
+import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class AuthnRolesResponseData implements IApiResponseData {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -3695033930841370744L;
+
+  @Getter
+  @Setter
+  public List<Role> roles;
+  
+  
+  public static AuthnRolesResponseData of(List<Role> roles) {
+    AuthnRolesResponseData data = new AuthnRolesResponseData();
+    
+    data.setRoles(roles);
+    
+    return data;
+  }
+
+}
diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnRoutesResponseData.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnRoutesResponseData.java
new file mode 100644 (file)
index 0000000..3c46ae4
--- /dev/null
@@ -0,0 +1,31 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.authn.response;
+
+import java.util.List;
+
+import com.supwisdom.institute.backend.base.domain.entity.Route;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class AuthnRoutesResponseData implements IApiResponseData {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -7221340609572046915L;
+
+  @Getter
+  @Setter
+  public List<Route> routes;
+  
+  
+  public static AuthnRoutesResponseData of(List<Route> routes) {
+    AuthnRoutesResponseData data = new AuthnRoutesResponseData();
+    
+    data.setRoutes(routes);
+    
+    return data;
+  }
+
+}
index ef218bf..c5b1e18 100644 (file)
@@ -67,6 +67,12 @@ public class Permission extends ABaseEntity {
   @Column(name = "TYPE_")
   private String type;
 
+  /**
+   * 菜单图标
+   */
+  @Column(name = "ICON", nullable = true)
+  private String icon;
+
   /**
    * URL地址
    */
diff --git a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/entity/PermissionResource.java b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/entity/PermissionResource.java
new file mode 100644 (file)
index 0000000..7ec0413
--- /dev/null
@@ -0,0 +1,46 @@
+package com.supwisdom.institute.backend.base.domain.entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+import com.supwisdom.institute.backend.common.framework.entity.ABaseEntity;
+
+@Entity
+@Table(name = "TB_BASE_PERMISSION_RESOURCE")
+public class PermissionResource extends ABaseEntity {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 4224037561100974979L;
+
+  /**
+   * 权限ID
+   */
+  @Column(name = "PERMISSION_ID")
+  private String permissionId;
+
+  /**
+   * 资源ID
+   */
+  @Column(name = "RESOURCE_ID")
+  private String resourceId;
+
+  public String getPermissionId() {
+    return permissionId;
+  }
+
+  public void setPermissionId(String permissionId) {
+    this.permissionId = permissionId;
+  }
+
+  public String getResourceId() {
+    return resourceId;
+  }
+
+  public void setResourceId(String resourceId) {
+    this.resourceId = resourceId;
+  }
+
+}
index 24ab992..8f8f8a4 100644 (file)
@@ -18,6 +18,12 @@ public class Resource extends ABaseEntity {
    */
   private static final long serialVersionUID = 4288268877209267453L;
 
+  public static final String ACCESS_ANONYMOUS = "anonymous"; // 匿名访问anonymous
+  public static final String ACCESS_AUTHENTICATE = "authenticate"; // 认证访问authenticate
+  public static final String ACCESS_AUTHORIZE = "authorize"; // 授权访问authorize
+  public static final String ACCESS_PERMIT_ALL = "permitAll"; // 允许所有permitAll
+  public static final String ACCESS_DENY_ALL = "denyAll"; // 拒绝所有denyAll
+
   /**
    * 代码
    */
@@ -66,4 +72,12 @@ public class Resource extends ABaseEntity {
   @Column(name = "PATH")
   private String path;
 
+  /**
+   * 访问规则(匿名访问anonymous、认证访问authenticate、授权访问authorize、允许所有permitAll、拒绝所有denyAll)
+   */
+  @Getter
+  @Setter
+  @Column(name = "ACCESS")
+  private String access;
+
 }
diff --git a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/model/PermissionRoleSet.java b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/model/PermissionRoleSet.java
new file mode 100644 (file)
index 0000000..a95a0f7
--- /dev/null
@@ -0,0 +1,31 @@
+package com.supwisdom.institute.backend.base.domain.model;
+
+import java.util.Collection;
+
+import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.model.IModel;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class PermissionRoleSet extends Permission implements IModel {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -1823157193945264156L;
+
+  @Getter
+  @Setter
+  Collection<Role> roles;
+  
+  public PermissionRoleSet(Permission permission, Collection<Role> roles) {
+    
+    EntityUtils.copy(permission, this);
+    
+    this.roles = roles;
+  }
+  
+}
index d356ab6..598b30d 100644 (file)
@@ -1,12 +1,13 @@
 package com.supwisdom.institute.backend.base.domain.model;
 
-import java.util.Set;
+import java.util.Collection;
 
 import lombok.Getter;
 import lombok.Setter;
 
 import com.supwisdom.institute.backend.base.domain.entity.Resource;
 import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
 import com.supwisdom.institute.backend.common.framework.model.IModel;
 
 public class ResourceRoleSet extends Resource implements IModel {
@@ -18,6 +19,13 @@ public class ResourceRoleSet extends Resource implements IModel {
 
   @Getter
   @Setter
-  Set<Role> roles;
+  Collection<Role> roles;
+
+  public ResourceRoleSet(Resource resource, Collection<Role> roles) {
+    
+    EntityUtils.copy(resource, this);
+    
+    this.roles = roles;
+  }
   
 }
diff --git a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/repo/PermissionResourceRepository.java b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/repo/PermissionResourceRepository.java
new file mode 100644 (file)
index 0000000..c40aef7
--- /dev/null
@@ -0,0 +1,194 @@
+package com.supwisdom.institute.backend.base.domain.repo;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import org.springframework.data.domain.Example;
+import org.springframework.data.domain.ExampleMatcher;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.base.domain.entity.PermissionResource;
+import com.supwisdom.institute.backend.base.domain.entity.Resource;
+import com.supwisdom.institute.backend.common.framework.repo.BaseJpaRepository;
+import com.supwisdom.institute.backend.common.util.MapBeanUtils;
+
+@Repository
+public interface PermissionResourceRepository extends BaseJpaRepository<PermissionResource> {
+
+  public default Page<PermissionResource> selectPageList(int pageIndex, int pageSize, Map<String, Object> mapBean) {
+    PermissionResource probe = new PermissionResource();
+    if (mapBean != null) {
+      probe.setPermissionId(MapBeanUtils.getString(mapBean, "permissionId"));
+      probe.setResourceId(MapBeanUtils.getString(mapBean, "resourceId"));
+    }
+
+    ExampleMatcher matcher = ExampleMatcher.matching()
+        .withMatcher("permissionId", ExampleMatcher.GenericPropertyMatchers.exact())
+        .withMatcher("resourceId", ExampleMatcher.GenericPropertyMatchers.exact());
+
+    PageRequest pageRequest = PageRequest.of(pageIndex, pageSize);
+    Example<PermissionResource> example = Example.of(probe, matcher);
+
+    Page<PermissionResource> page = this.findAll(example, pageRequest);
+
+    return page;
+  }
+
+  public default Page<PermissionResource> selectPermissionResources(int pageIndex, int pageSize, Map<String, Object> mapBean) {
+
+    PermissionResource probe = new PermissionResource();
+    if (mapBean != null) {
+      probe.setPermissionId(MapBeanUtils.getString(mapBean, "permissionId"));
+      probe.setResourceId(MapBeanUtils.getString(mapBean, "resourceId"));
+    }
+
+    ExampleMatcher matcher = ExampleMatcher.matching()
+        .withMatcher("permissionId", ExampleMatcher.GenericPropertyMatchers.exact())
+        .withMatcher("resourceId", ExampleMatcher.GenericPropertyMatchers.exact());
+
+    Example<PermissionResource> example = Example.of(probe, matcher);
+
+    PageRequest pageRequest = PageRequest.of(pageIndex, pageSize);
+
+    Page<PermissionResource> page = this.findAll(example, pageRequest); // FIXME: 多表关联查询
+
+    return page;
+  }
+
+  public default void relatePermissionResources(Permission permission, List<PermissionResource> relateResources) {
+
+    List<PermissionResource> existPermissionResources = this.selectListByPermissionId(permission.getId());
+
+    Map<String, PermissionResource> existMapPermissionResources = new LinkedHashMap<String, PermissionResource>();
+    for (PermissionResource permissionResource : existPermissionResources) {
+      String k = String.format("%s", permissionResource.getResourceId());
+      existMapPermissionResources.put(k, permissionResource);
+    }
+
+    for (PermissionResource permissionResource : relateResources) {
+      String k = String.format("%s", permissionResource.getResourceId());
+
+      if (existMapPermissionResources.containsKey(k)) {
+        existMapPermissionResources.remove(k);
+      } else {
+        permissionResource.setCompanyId(permission.getCompanyId());
+        permissionResource.setPermissionId(permission.getId());
+
+        this.insert(permissionResource);
+      }
+    }
+
+    for (PermissionResource rolePermission : existMapPermissionResources.values()) {
+      this.deleteById(rolePermission.getId());
+    }
+  }
+
+  public default List<PermissionResource> selectListByPermissionId(String permissionId) {
+
+    PermissionResource probe = new PermissionResource();
+    probe.setPermissionId(permissionId);
+
+    ExampleMatcher matcher = ExampleMatcher.matching().withMatcher("permissionId",
+        ExampleMatcher.GenericPropertyMatchers.exact());
+
+    Example<PermissionResource> example = Example.of(probe, matcher);
+
+    List<PermissionResource> rolePermissions = this.findAll(example);
+
+    return rolePermissions;
+  }
+
+  
+  public default void relateResourcePermissions(Resource resource, List<PermissionResource> relatePermissions) {
+
+    // 获取权限已关联的角色
+    List<PermissionResource> existResourcePermissions = this.selectListByResourceId(resource.getId());
+
+    Map<String, PermissionResource> existMapResourcePermissions = new LinkedHashMap<String, PermissionResource>();
+    for (PermissionResource permissionResource : existResourcePermissions) {
+      String k = String.format("%s", permissionResource.getPermissionId());
+      existMapResourcePermissions.put(k, permissionResource);
+    }
+
+    // 保存未关联的角色
+    for (PermissionResource permissionResource : relatePermissions) {
+      String k = String.format("%s", permissionResource.getPermissionId());
+
+      if (existMapResourcePermissions.containsKey(k)) {
+        existMapResourcePermissions.remove(k);
+      } else {
+        permissionResource.setCompanyId(resource.getCompanyId());
+        permissionResource.setResourceId(resource.getId());
+
+        this.insert(permissionResource);
+      }
+    }
+
+    // 删除移除关联的角色
+    for (PermissionResource rolePermission : existMapResourcePermissions.values()) {
+      this.deleteById(rolePermission.getId());
+    }
+  }
+  public default List<PermissionResource> selectListByResourceId(String resourceId) {
+
+    PermissionResource probe = new PermissionResource();
+    probe.setResourceId(resourceId);
+
+    ExampleMatcher matcher = ExampleMatcher.matching().withMatcher("resourceId",
+        ExampleMatcher.GenericPropertyMatchers.exact());
+
+    Example<PermissionResource> example = Example.of(probe, matcher);
+
+    List<PermissionResource> rolePermissions = this.findAll(example);
+
+    return rolePermissions;
+  }
+
+  
+  public default PermissionResource selectOneByPermissionResource(String permissionId, String resourceId) {
+
+    PermissionResource probe = new PermissionResource();
+    probe.setPermissionId(permissionId);
+    probe.setResourceId(resourceId);
+
+    ExampleMatcher matcher = ExampleMatcher.matching()
+        .withMatcher("permissionId", ExampleMatcher.GenericPropertyMatchers.exact())
+        .withMatcher("resourceId", ExampleMatcher.GenericPropertyMatchers.exact())
+        ;
+
+    Example<PermissionResource> example = Example.of(probe, matcher);
+    
+    Optional<PermissionResource> o = this.findOne(example);
+    
+    return o.isPresent() ? o.get() : null;
+  }
+
+  public default void addPermissionResource(String permissionId, String resourceId) {
+
+    PermissionResource rolePermission = this.selectOneByPermissionResource(permissionId, resourceId);
+    
+    if (rolePermission == null) {
+      rolePermission = new PermissionResource();
+      //rolePermission.setCompanyId(companyId);
+      rolePermission.setPermissionId(permissionId);
+      rolePermission.setResourceId(resourceId);
+      
+      this.insert(rolePermission);
+    }
+  }
+
+  public default void removePermissionResource(String permissionId, String resourceId) {
+
+    PermissionResource rolePermission = this.selectOneByPermissionResource(permissionId, resourceId);
+    
+    if (rolePermission != null) {
+      this.deleteById(rolePermission.getId());
+    }
+  }
+
+}
index 5853b26..00c3ee6 100644 (file)
@@ -143,4 +143,22 @@ public interface RoleRepository extends BaseJpaRepository<Role> {
       + "and r.status='1' and g.status='1' and a.status='1' and a.enabled=1 ")
   public List<Role> selectAccountGroupRoleByUsername(@Param("username") String username);
 
+  
+  @Query(value = "select r from Role r "
+      + "inner join RolePermission rp on r.id=rp.roleId "
+      + "inner join Permission p on rp.permissionId=p.id "
+      + "where p.id=:permissionId "
+      + "and r.status='1' and p.status='1' ")
+  public List<Role> selectPermissionRolesByPermission(@Param("permissionId") String permissionId);
+  
+  
+  @Query(value = "select r from Role r "
+      + "inner join RolePermission rp on r.id=rp.roleId "
+      + "inner join Permission p on rp.permissionId=p.id "
+      + "inner join PermissionResource pres on p.id=pres.permissionId "
+      + "inner join Resource res on pres.resourceId=res.id "
+      + "where res.id=:resourceId "
+      + "and r.status='1' and p.status='1' and res.status='1' ")
+  public List<Role> selectResourceRolesByResource(@Param("resourceId") String resourceId);
+  
 }
index 39fe4e2..c546400 100644 (file)
@@ -10,13 +10,23 @@ import lombok.extern.slf4j.Slf4j;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Example;
+import org.springframework.data.domain.ExampleMatcher;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;
 
 import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.base.domain.entity.PermissionResource;
+import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.base.domain.model.PermissionRoleSet;
 import com.supwisdom.institute.backend.base.domain.model.PermissionTreeNode;
 import com.supwisdom.institute.backend.base.domain.repo.PermissionRepository;
+import com.supwisdom.institute.backend.base.domain.repo.PermissionResourceRepository;
+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;
 
 @Slf4j
 @Service
@@ -29,7 +39,13 @@ public class PermissionService extends ABaseService<Permission, PermissionReposi
 
   @Autowired
   private PermissionRepository permissionRepository;
-  
+
+  @Autowired
+  private PermissionResourceRepository permissionResourceRepository;
+
+  @Autowired
+  private RoleRepository roleRepository;
+
   @Override
   public Permission insert(Permission entity) {
     Permission parentPermission = permissionRepository.selectById(entity.getParentId());
@@ -47,6 +63,78 @@ public class PermissionService extends ABaseService<Permission, PermissionReposi
     });
   }
   
+  
+
+  public Page<PermissionResource> selectPermissionResources(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean) {
+    
+    if (loadAll) {
+      pageIndex = 0;
+      pageSize = Integer.MAX_VALUE;
+    }
+
+    PermissionResource probe = new PermissionResource();
+    if (mapBean != null) {
+      probe.setPermissionId(MapBeanUtils.getString(mapBean, "permissionId"));
+      probe.setResourceId(MapBeanUtils.getString(mapBean, "resourceId"));
+    }
+
+    ExampleMatcher matcher = ExampleMatcher.matching()
+        .withMatcher("permissionId", ExampleMatcher.GenericPropertyMatchers.exact())
+        .withMatcher("resourceId", ExampleMatcher.GenericPropertyMatchers.exact());
+
+    Example<PermissionResource> example = Example.of(probe, matcher);
+
+    PageRequest pageRequest = PageRequest.of(pageIndex, pageSize);
+
+    Page<PermissionResource> page = permissionResourceRepository.findAll(example, pageRequest); // FIXME: 多表关联查询
+
+    return page;
+  }
+
+  public void relatePermissionResources(Permission permission, List<PermissionResource> permissionResources) {
+
+    List<PermissionResource> existPermissionResources = this.selectPermissionResourcesByPermissionId(permission.getId());
+
+    Map<String, PermissionResource> existMapPermissionResources = new LinkedHashMap<String, PermissionResource>();
+    for (PermissionResource permissionResource : existPermissionResources) {
+      String k = String.format("%s", permissionResource.getPermissionId());
+      existMapPermissionResources.put(k, permissionResource);
+    }
+
+    for (PermissionResource permissionResource : permissionResources) {
+      String k = String.format("%s", permissionResource.getPermissionId());
+
+      if (existMapPermissionResources.containsKey(k)) {
+        existMapPermissionResources.remove(k);
+      } else {
+        permissionResource.setCompanyId(permission.getCompanyId());
+        permissionResource.setPermissionId(permission.getId());
+
+        permissionResourceRepository.insert(permissionResource);
+      }
+    }
+
+    for (PermissionResource permissionResource : existMapPermissionResources.values()) {
+      permissionResourceRepository.deleteById(permissionResource.getId());
+    }
+  }
+
+  public List<PermissionResource> selectPermissionResourcesByPermissionId(String permissionId) {
+
+    PermissionResource probe = new PermissionResource();
+    probe.setPermissionId(permissionId);
+
+    ExampleMatcher matcher = ExampleMatcher.matching().withMatcher("permissionId",
+        ExampleMatcher.GenericPropertyMatchers.exact());
+
+    Example<PermissionResource> example = Example.of(probe, matcher);
+
+    List<PermissionResource> permissionResources = permissionResourceRepository.findAll(example);
+
+    return permissionResources;
+  }
+  
+  
   private Permission selectApplicationPermission() {
     Permission permission = permissionRepository.selectById(Permission.APPLICATION_ID);
     
@@ -210,4 +298,22 @@ public class PermissionService extends ABaseService<Permission, PermissionReposi
     return convertPermissionTree(permissions, rootTreeNodeId);
   }
 
+  public List<PermissionRoleSet> selectPermissionRoleSet(Map<String, Object> mapBean) {
+    
+    List<PermissionRoleSet> prsList = new ArrayList<>();
+    
+    List<Permission> resourceList = permissionRepository.selectList(mapBean, null);
+    
+    for (Permission permission : resourceList) {
+      
+      List<Role> roleList = roleRepository.selectPermissionRolesByPermission(permission.getId());
+      
+      PermissionRoleSet prs = new PermissionRoleSet(permission, roleList);
+      
+      prsList.add(prs);
+    }
+    
+    return prsList;
+  }
+  
 }
index 47424ad..eea0422 100644 (file)
@@ -1,13 +1,17 @@
 package com.supwisdom.institute.backend.base.domain.service;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 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.model.ResourceRoleSet;
 import com.supwisdom.institute.backend.base.domain.repo.ResourceRepository;
+import com.supwisdom.institute.backend.base.domain.repo.RoleRepository;
 import com.supwisdom.institute.backend.common.framework.service.ABaseService;
 
 @Service
@@ -21,6 +25,9 @@ public class ResourceService extends ABaseService<Resource, ResourceRepository>
   @Autowired
   private ResourceRepository resourceRepository;
 
+  @Autowired
+  private RoleRepository roleRepository;
+
   
   public void deleteBatch(List<String> ids) {
     
@@ -30,9 +37,22 @@ public class ResourceService extends ABaseService<Resource, ResourceRepository>
   }
 
 
-  public List<ResourceRoleSet> selectByApplication(String applicationId) {
-    // TODO Auto-generated method stub
-    return null;
+  public List<ResourceRoleSet> selectResourceRoleSet(Map<String, Object> mapBean) {
+    
+    List<ResourceRoleSet> rrsList = new ArrayList<>();
+    
+    List<Resource> resourceList = resourceRepository.selectList(mapBean, null);
+    
+    for (Resource resource : resourceList) {
+      
+      List<Role> roleList = roleRepository.selectResourceRolesByResource(resource.getId());
+      
+      ResourceRoleSet rrs = new ResourceRoleSet(resource, roleList);
+      
+      rrsList.add(rrs);
+    }
+    
+    return rrsList;
   }
   
 }
index ce2acf8..64ea622 100644 (file)
@@ -3,6 +3,7 @@ package com.supwisdom.institute.backend.admin.bff;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 import com.supwisdom.infras.online.doc.configuration.EnableInfrasOnlineDoc;
 import com.supwisdom.institute.backend.common.core.transmit.annotation.EnableSimpleUserTransmit;
@@ -11,6 +12,8 @@ import com.supwisdom.institute.backend.common.framework.exception.EnableCustomEx
 @SpringBootApplication
 @EnableFeignClients
 
+@EnableScheduling
+
 @EnableSimpleUserTransmit
 
 @EnableCustomExceptionHandler
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/autorefesh/base/InMemeryPermissionRoleSetAutoRefresh.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/autorefesh/base/InMemeryPermissionRoleSetAutoRefresh.java
new file mode 100644 (file)
index 0000000..d149eee
--- /dev/null
@@ -0,0 +1,26 @@
+package com.supwisdom.institute.backend.admin.bff.api.v1.autorefesh.base;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import com.supwisdom.institute.backend.admin.bff.api.v1.service.base.AuthnService;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Component
+public class InMemeryPermissionRoleSetAutoRefresh {
+
+  @Autowired
+  private AuthnService authnService;
+  
+  @Scheduled(initialDelayString = "${inMemeryPermissionRoleSetAutoRefresh.schedule.startDelay:500}",
+      fixedDelayString = "${inMemeryPermissionRoleSetAutoRefresh.schedule.repeatInterval:20000}")
+  public void refresh() {
+    log.info("InMemeryPermissionRoleSetAutoRefresh, refresh permissionRoleSets");
+    
+    authnService.loadPermissionRoleSets();
+  }
+
+}
index f1a8d62..c88e7c5 100644 (file)
@@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.RestController;
 import com.supwisdom.institute.backend.admin.bff.api.v1.model.base.Permission;
 import com.supwisdom.institute.backend.admin.bff.api.v1.model.me.CurrentUser;
 import com.supwisdom.institute.backend.admin.bff.api.v1.model.me.GrantedMenu;
-import com.supwisdom.institute.backend.admin.bff.api.v1.service.base.AuthnAccountService;
+import com.supwisdom.institute.backend.admin.bff.api.v1.service.base.AuthnService;
 import com.supwisdom.institute.backend.admin.bff.api.v1.vo.me.response.data.CurrentUserResponseData;
 import com.supwisdom.institute.backend.admin.bff.api.v1.vo.me.response.data.GrantedMenusResponseData;
 import com.supwisdom.institute.backend.admin.bff.utils.CurrentUserUtil;
@@ -30,7 +30,7 @@ import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiRe
 public class MeController {
   
   @Autowired
-  private AuthnAccountService authnAccountService;
+  private AuthnService authnService;
   
   @ApiOperation(
       tags = { "me" },
@@ -54,14 +54,14 @@ public class MeController {
   
   @ApiOperation(
       tags = { "me" },
-      value = "获取登录用户的访问菜单", notes = "获取登录用户的访问菜单", nickname = "menus"
+      value = "获取登录用户的访问菜单", notes = "获取登录用户的访问菜单", nickname = "accountMenus"
   )
   @RequestMapping(method = RequestMethod.GET, path = "/menus", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-  public DefaultApiResponse<GrantedMenusResponseData> menus() {
+  public DefaultApiResponse<GrantedMenusResponseData> accountMenus() {
     
     String username = CurrentUserUtil.currentUsername();
     
-    List<Permission> menus =  authnAccountService.menus(username, "1");
+    List<Permission> menus =  authnService.menus(username, "1");  // XXX: applicationId
     
     List<GrantedMenu> grantedMenus = new ArrayList<>();
     
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/controller/open/OpenController.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/controller/open/OpenController.java
new file mode 100644 (file)
index 0000000..4944fbd
--- /dev/null
@@ -0,0 +1,55 @@
+package com.supwisdom.institute.backend.admin.bff.api.v1.controller.open;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.admin.bff.api.v1.model.base.PermissionRoleSet;
+import com.supwisdom.institute.backend.admin.bff.api.v1.model.open.Menu;
+import com.supwisdom.institute.backend.admin.bff.api.v1.service.base.AuthnService;
+import com.supwisdom.institute.backend.admin.bff.api.v1.vo.open.response.data.MenusResponseData;
+import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+@Api(value = "BFFOpen", tags = { "open" }, description = "公开接口")
+@RestController
+@RequestMapping(value = "/api/v1/open")
+public class OpenController {
+  
+  @Autowired
+  private AuthnService authnService;
+  
+  @ApiOperation(
+      tags = { "open" },
+      value = "获取菜单", notes = "获取菜单", nickname = "openMenus"
+  )
+  @RequestMapping(method = RequestMethod.GET, path = "/menus", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public DefaultApiResponse<MenusResponseData> menus(
+      @RequestParam(name = "applicationId", required = false) String applicationId) {
+    
+    List<Menu> menus = new ArrayList<>();
+
+    List<PermissionRoleSet> permissionRoleSets = authnService.getPermissionRoleSets(applicationId);
+    if (permissionRoleSets != null) {
+      for (PermissionRoleSet permissionRoleSet : permissionRoleSets) {
+        Menu menu = new Menu();
+        BeanUtils.copyProperties(permissionRoleSet, menu);
+        menus.add(menu);
+      }
+    }
+    
+    MenusResponseData data = MenusResponseData.of(menus);
+    return new DefaultApiResponse<MenusResponseData>(data);
+  }
+  
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/controller/open/OpenSyncController.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/controller/open/OpenSyncController.java
new file mode 100644 (file)
index 0000000..86941f3
--- /dev/null
@@ -0,0 +1,55 @@
+package com.supwisdom.institute.backend.admin.bff.api.v1.controller.open;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.admin.bff.api.v1.model.base.Role;
+import com.supwisdom.institute.backend.admin.bff.api.v1.model.open.SyncRoleModel;
+import com.supwisdom.institute.backend.admin.bff.api.v1.service.base.AuthnService;
+import com.supwisdom.institute.backend.admin.bff.api.v1.vo.open.response.data.OpenSyncRolesResponseData;
+import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+@Api(value = "BFFOpen", tags = { "open" }, description = "公开接口")
+@RestController
+@RequestMapping(value = "/api/v1/open/sync")
+public class OpenSyncController {
+
+  @Autowired
+  private AuthnService authnService;
+
+  @ApiOperation(
+      tags = { "open" },
+      value = "获取角色", notes = "获取角色", nickname = "openRoles"
+  )
+  @RequestMapping(method = RequestMethod.GET, path = "/roles", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public DefaultApiResponse<OpenSyncRolesResponseData> roles(
+      @RequestParam(name = "applicationId", required = true) String applicationId) {
+    
+    List<SyncRoleModel> syncRoleModels = new ArrayList<>();
+
+    List<Role> systemRoles = authnService.roles();
+    for (Role systemRole : systemRoles) {
+      SyncRoleModel syncRoleModel = new SyncRoleModel(
+          systemRole.getId(), 
+          systemRole.getCode(),
+          systemRole.getName(),
+          systemRole.getMemo());
+      syncRoleModels.add(syncRoleModel);
+    }
+    
+    OpenSyncRolesResponseData data = OpenSyncRolesResponseData.of(applicationId, syncRoleModels);
+    return new DefaultApiResponse<OpenSyncRolesResponseData>(data);
+  }
+  
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/base/Application.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/base/Application.java
new file mode 100644 (file)
index 0000000..b0f6c48
--- /dev/null
@@ -0,0 +1,39 @@
+package com.supwisdom.institute.backend.admin.bff.api.v1.model.base;
+
+import com.supwisdom.institute.backend.common.framework.model.ABaseModel;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class Application extends ABaseModel {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 7687658763529677076L;
+
+  private String id;
+  
+  /**
+   * 代码
+   */
+  private String code;
+
+  /**
+   * 名称
+   */
+  private String name;
+
+  /**
+   * 备注
+   */
+  private String memo;
+
+  /**
+   * 状态(1 启用,0 停用)
+   */
+  private String status;
+
+}
index 3425927..5877bf9 100644 (file)
@@ -36,6 +36,11 @@ public class Permission extends ABaseModel {
    */
   private String status;
 
+  /**
+   * 菜单图标
+   */
+  private String icon;
+
   /**
    * 类型(1 应用,2 菜单,3 操作)
    */
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/base/PermissionRoleSet.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/base/PermissionRoleSet.java
new file mode 100644 (file)
index 0000000..6080107
--- /dev/null
@@ -0,0 +1,114 @@
+package com.supwisdom.institute.backend.admin.bff.api.v1.model.base;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import com.supwisdom.institute.backend.common.framework.model.ABaseModel;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class PermissionRoleSet extends ABaseModel {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -1482739465611090145L;
+  
+  @Getter
+  @Setter
+  private String id;
+
+  /**
+   * 代码
+   */
+  @Getter
+  @Setter
+  private String code;
+
+  /**
+   * 名称
+   */
+  @Getter
+  @Setter
+  private String name;
+
+  /**
+   * 备注
+   */
+  @Getter
+  @Setter
+  private String memo;
+
+  /**
+   * 状态(1 启用,0 停用)
+   */
+  @Getter
+  @Setter
+  private String status;
+
+  /**
+   * 类型(1 应用,2 菜单,3 操作)
+   */
+  @Getter
+  @Setter
+  private String type;
+
+  /**
+   * 菜单图标
+   */
+  @Getter
+  @Setter
+  private String icon;
+
+  /**
+   * URL地址
+   */
+  @Getter
+  @Setter
+  private String url;
+
+  /**
+   * 系统ID
+   */
+  @Getter
+  @Setter
+  private String applicationId;
+
+  /**
+   * 父级ID
+   */
+  @Getter
+  @Setter
+  private String parentId;
+
+  /**
+   * 排序
+   */
+  @Getter
+  @Setter
+  private Integer order;
+
+  @Getter
+  @Setter
+  private Collection<Role> roles;
+  
+  private Collection<String> permissionRoles = null;
+  public boolean matches(Collection<String> userRoles) {
+    if (permissionRoles == null) {
+      permissionRoles = new ArrayList<String>();
+      Iterator<Role> it = roles.iterator();
+      while (it.hasNext()) {
+        Role r = it.next();
+        permissionRoles.add(r.getCode());
+      }
+    }
+    
+    userRoles.retainAll(permissionRoles);
+    
+    return !userRoles.isEmpty();
+  }
+  
+  
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/base/ResourceRoleSet.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/base/ResourceRoleSet.java
new file mode 100644 (file)
index 0000000..665154d
--- /dev/null
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.admin.bff.api.v1.model.base;
+
+import java.util.Collection;
+
+import com.supwisdom.institute.backend.common.framework.model.ABaseModel;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class ResourceRoleSet extends ABaseModel {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -683204173918706673L;
+
+  public static final String ACCESS_ANONYMOUS = "anonymous"; // 匿名访问anonymous
+  public static final String ACCESS_AUTHENTICATE = "authenticate"; // 认证访问authenticate
+  public static final String ACCESS_AUTHORIZE = "authorize"; // 授权访问authorize
+  public static final String ACCESS_PERMIT_ALL = "permitAll"; // 允许所有permitAll
+  public static final String ACCESS_DENY_ALL = "denyAll"; // 拒绝所有denyAll
+
+  @Getter
+  @Setter
+  private String id;
+
+  /**
+   * 代码
+   */
+  @Getter
+  @Setter
+  private String code;
+
+  /**
+   * 名称
+   */
+  @Getter
+  @Setter
+  private String name;
+
+  /**
+   * 备注
+   */
+  @Getter
+  @Setter
+  private String memo;
+
+  /**
+   * 状态(1 启用,0 停用)
+   */
+  @Getter
+  @Setter
+  private String status;
+
+  /**
+   * 请求方式(GET、POST、PUT、DELETE 等)
+   */
+  @Getter
+  @Setter
+  private String method;
+
+  /**
+   * 请求路径
+   */
+  @Getter
+  @Setter
+  private String path;
+
+  /**
+   * 访问规则(匿名访问anonymous、认证访问authenticate、授权访问authorize、允许所有permitAll、拒绝所有denyAll)
+   */
+  @Getter
+  @Setter
+  private String access;
+
+  @Getter
+  @Setter
+  Collection<Role> roles;
+  
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/open/Menu.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/open/Menu.java
new file mode 100644 (file)
index 0000000..b3bdc99
--- /dev/null
@@ -0,0 +1,64 @@
+package com.supwisdom.institute.backend.admin.bff.api.v1.model.open;
+
+import com.supwisdom.institute.backend.common.framework.model.ABaseModel;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class Menu extends ABaseModel {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 4206010261706882919L;
+  
+  private String id;
+
+  /**
+   * 代码
+   */
+  private String code;
+
+  /**
+   * 名称
+   */
+  private String name;
+
+  /**
+   * 备注
+   */
+  private String memo;
+
+  /**
+   * 状态(1 启用,0 停用)
+   */
+  private String status;
+
+  /**
+   * 菜单图标
+   */
+  private String icon;
+
+  /**
+   * URL地址
+   */
+  private String url;
+
+  /**
+   * 系统ID
+   */
+  private String applicationId;
+
+  /**
+   * 父级ID
+   */
+  private String parentId;
+
+  /**
+   * 排序
+   */
+  private Integer order;
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/open/SyncRoleModel.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/model/open/SyncRoleModel.java
new file mode 100644 (file)
index 0000000..72986bc
--- /dev/null
@@ -0,0 +1,39 @@
+package com.supwisdom.institute.backend.admin.bff.api.v1.model.open;
+
+import java.io.Serializable;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+public class SyncRoleModel implements Serializable {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -1916611618482825238L;
+  
+  /**
+   * ID
+   */
+  private String id;
+
+  /**
+   * 代码
+   */
+  private String code;
+
+  /**
+   * 名称
+   */
+  private String name;
+
+  /**
+   * 描述
+   */
+  private String memo;
+
+}
@@ -8,11 +8,11 @@ import com.supwisdom.institute.backend.admin.bff.api.v1.remote.exception.Fallbac
 import feign.hystrix.FallbackFactory;
 
 @Component
-public class AuthnAccountRemoteFallbackFactory implements FallbackFactory<AuthnAccountRemoteFeignClient> {
+public class AuthnRemoteFallbackFactory implements FallbackFactory<AuthnRemoteFeignClient> {
 
   @Override
-  public AuthnAccountRemoteFeignClient create(Throwable cause) {
-    return new AuthnAccountRemoteFeignClient() {
+  public AuthnRemoteFeignClient create(Throwable cause) {
+    return new AuthnRemoteFeignClient() {
 
       @Override
       public JSONObject account(String username) {
@@ -62,6 +62,39 @@ public class AuthnAccountRemoteFallbackFactory implements FallbackFactory<AuthnA
         return FallbackError.defaultErrorJson(cause);
       }
       
+
+      @Override
+      public JSONObject applications() {
+        if (cause != null) {
+          cause.printStackTrace();
+        }
+        return FallbackError.defaultErrorJson(cause);
+      }
+
+      @Override
+      public JSONObject roles() {
+        if (cause != null) {
+          cause.printStackTrace();
+        }
+        return FallbackError.defaultErrorJson(cause);
+      }
+
+      @Override
+      public JSONObject permissionRoleSets(String applicationId) {
+        if (cause != null) {
+          cause.printStackTrace();
+        }
+        return FallbackError.defaultErrorJson(cause);
+      }
+
+      @Override
+      public JSONObject resourceRoleSets(String applicationId) {
+        if (cause != null) {
+          cause.printStackTrace();
+        }
+        return FallbackError.defaultErrorJson(cause);
+      }
+      
     };
   }
 
@@ -13,9 +13,9 @@ import com.supwisdom.institute.backend.admin.bff.api.v1.remote.base.configuratio
     configuration = {BaseFeignClientConfiguration.class},
     name = "base-admin-account-remote-feign-client",
     url = "${sw-backend-base-api.uri}/v1/authn",
-    fallbackFactory = AuthnAccountRemoteFallbackFactory.class
+    fallbackFactory = AuthnRemoteFallbackFactory.class
 )
-public interface AuthnAccountRemoteFeignClient {
+public interface AuthnRemoteFeignClient {
   
   @RequestMapping(method = RequestMethod.GET, path = "/{username}/account")
   JSONObject account(
@@ -46,4 +46,19 @@ public interface AuthnAccountRemoteFeignClient {
       @PathVariable(name = "username") String username,
       @RequestParam(name = "applicationId", required = false) String applicationId);
 
+
+  @RequestMapping(method = RequestMethod.GET, path = "/applications")
+  JSONObject applications();
+  
+  @RequestMapping(method = RequestMethod.GET, path = "/roles")
+  JSONObject roles();
+
+  @RequestMapping(method = RequestMethod.GET, path = "/permissionRoleSets")
+  JSONObject permissionRoleSets(
+      @RequestParam(name = "applicationId", required = false) String applicationId);
+
+  @RequestMapping(method = RequestMethod.GET, path = "/resourceRoleSets")
+  JSONObject resourceRoleSets(
+      @RequestParam(name = "applicationId", required = false) String applicationId);
+
 }
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/service/base/AuthnAccountService.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/service/base/AuthnAccountService.java
deleted file mode 100644 (file)
index e3b768e..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.api.v1.service.base;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.alibaba.fastjson.JSONObject;
-import com.supwisdom.institute.backend.admin.bff.api.v1.model.base.Account;
-import com.supwisdom.institute.backend.admin.bff.api.v1.model.base.Permission;
-import com.supwisdom.institute.backend.admin.bff.api.v1.model.base.Role;
-import com.supwisdom.institute.backend.admin.bff.api.v1.remote.base.v1.authn.AuthnAccountRemoteFeignClient;
-
-@Service
-public class AuthnAccountService {
-  
-  @Autowired
-  private AuthnAccountRemoteFeignClient authnAccountRemote;
-  
-  public Account account(String username) {
-    
-    JSONObject jsonObject = authnAccountRemote.account(username);
-    if (jsonObject == null) {
-      return null;
-    }
-    
-    if (jsonObject.getIntValue("code") == 0) {
-      JSONObject data = jsonObject.getJSONObject("data");
-      
-      return data.toJavaObject(Account.class);
-    }
-    
-    return null;
-  }
-
-  public List<Role> roles(String username) {
-    
-    JSONObject jsonObject = authnAccountRemote.roles(username);
-    if (jsonObject == null) {
-      return null;
-    }
-    
-    if (jsonObject.getIntValue("code") == 0) {
-      JSONObject data = jsonObject.getJSONObject("data");
-      
-      return data.getJSONArray("roles").toJavaList(Role.class);
-    }
-    
-    return null;
-  }
-
-  public List<Permission> menus(String username, String applicationId) {
-    
-    JSONObject jsonObject = authnAccountRemote.menus(username, applicationId);
-    if (jsonObject == null) {
-      return null;
-    }
-    
-    if (jsonObject.getIntValue("code") == 0) {
-      JSONObject data = jsonObject.getJSONObject("data");
-      
-      return data.getJSONArray("permissions").toJavaList(Permission.class);
-    }
-    
-    return null;
-  }
-
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/service/base/AuthnService.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/service/base/AuthnService.java
new file mode 100644 (file)
index 0000000..8f6d9df
--- /dev/null
@@ -0,0 +1,202 @@
+package com.supwisdom.institute.backend.admin.bff.api.v1.service.base;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+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;
+
+import com.alibaba.fastjson.JSONObject;
+import com.supwisdom.institute.backend.admin.bff.api.v1.model.base.Account;
+import com.supwisdom.institute.backend.admin.bff.api.v1.model.base.Application;
+import com.supwisdom.institute.backend.admin.bff.api.v1.model.base.Permission;
+import com.supwisdom.institute.backend.admin.bff.api.v1.model.base.PermissionRoleSet;
+import com.supwisdom.institute.backend.admin.bff.api.v1.model.base.ResourceRoleSet;
+import com.supwisdom.institute.backend.admin.bff.api.v1.model.base.Role;
+import com.supwisdom.institute.backend.admin.bff.api.v1.remote.base.v1.authn.AuthnRemoteFeignClient;
+
+@Slf4j
+@Service
+public class AuthnService {
+  
+  @Autowired
+  private AuthnRemoteFeignClient authnRemote;
+  
+  public Account account(String username) {
+    
+    JSONObject jsonObject = authnRemote.account(username);
+    if (jsonObject == null) {
+      return null;
+    }
+    
+    if (jsonObject.getIntValue("code") == 0) {
+      JSONObject data = jsonObject.getJSONObject("data");
+      
+      return data.toJavaObject(Account.class);
+    }
+    
+    return null;
+  }
+
+  public List<Role> roles(String username) {
+    
+    JSONObject jsonObject = authnRemote.roles(username);
+    if (jsonObject == null) {
+      return null;
+    }
+    
+    if (jsonObject.getIntValue("code") == 0) {
+      JSONObject data = jsonObject.getJSONObject("data");
+      
+      return data.getJSONArray("roles").toJavaList(Role.class);
+    }
+    
+    return null;
+  }
+
+  public List<Permission> menus(String username, String applicationId) {
+    
+    JSONObject jsonObject = authnRemote.menus(username, applicationId);
+    if (jsonObject == null) {
+      return null;
+    }
+    
+    if (jsonObject.getIntValue("code") == 0) {
+      JSONObject data = jsonObject.getJSONObject("data");
+      
+      return data.getJSONArray("permissions").toJavaList(Permission.class);
+    }
+    
+    return null;
+  }
+
+  
+  public List<Application> applications() {
+    
+    try {
+      JSONObject jsonObject = authnRemote.applications();
+      if (jsonObject == null) {
+        return null;
+      }
+      log.debug("{}", jsonObject.toJSONString());
+      
+      if (jsonObject.containsKey("code") && jsonObject.getIntValue("code") == 0) {
+        JSONObject data = jsonObject.getJSONObject("data");
+        
+        return data.getJSONArray("applications").toJavaList(Application.class);
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+    
+    return null;
+  }
+  
+  public List<Role> roles() {
+    
+    try {
+      JSONObject jsonObject = authnRemote.roles();
+      if (jsonObject == null) {
+        return null;
+      }
+      log.debug("{}", jsonObject.toJSONString());
+      
+      if (jsonObject.containsKey("code") && jsonObject.getIntValue("code") == 0) {
+        JSONObject data = jsonObject.getJSONObject("data");
+        
+        return data.getJSONArray("roles").toJavaList(Role.class);
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+    
+    return null;
+  }
+
+  
+  
+  
+
+  public static volatile Map<String, List<PermissionRoleSet>> mapPermissionRoleSets = 
+      new HashMap<String, List<PermissionRoleSet>>();
+  
+  public void putPermissionRoleSets(String applicationId, List<PermissionRoleSet> permissionRoleSets) {
+    AuthnService.mapPermissionRoleSets.put(applicationId, permissionRoleSets);
+  }
+  
+  public List<PermissionRoleSet> getPermissionRoleSets(String applicationId) {
+    if (StringUtils.isNotEmpty(applicationId)) {
+      return AuthnService.mapPermissionRoleSets.get(applicationId);
+    }
+    
+    List<PermissionRoleSet> allPermissionRoleSets = new ArrayList<>();
+    for (List<PermissionRoleSet> permissionRoleSets : AuthnService.mapPermissionRoleSets.values()) {
+      allPermissionRoleSets.addAll(permissionRoleSets);
+    }
+    
+    return allPermissionRoleSets;
+  }
+
+  public void loadPermissionRoleSets() {
+    
+    List<Application> applications = applications();
+    if (applications != null) {
+      for (Application application : applications) {
+        String applicationId = application.getId();
+        List<PermissionRoleSet> permissionRoleSets = this.permissionRoleSets(applicationId);
+        if (permissionRoleSets != null) {
+          this.putPermissionRoleSets(applicationId, permissionRoleSets);
+        }
+      }
+    }
+  }
+  
+  
+  public List<PermissionRoleSet> permissionRoleSets(String applicationId) {
+    
+    try {
+      JSONObject jsonObject = authnRemote.permissionRoleSets(applicationId);
+      if (jsonObject == null) {
+        return null;
+      }
+      log.debug("{}", jsonObject.toJSONString());
+      
+      if (jsonObject.containsKey("code") && jsonObject.getIntValue("code") == 0) {
+        JSONObject data = jsonObject.getJSONObject("data");
+        
+        return data.getJSONArray("permissionRoleSets").toJavaList(PermissionRoleSet.class);
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+    
+    return null;
+  }
+
+  public List<ResourceRoleSet> resourceRoleSets() {
+    
+    try {
+      JSONObject jsonObject = authnRemote.resourceRoleSets(null);
+      if (jsonObject == null) {
+        return null;
+      }
+      log.debug("{}", jsonObject.toJSONString());
+      
+      if (jsonObject.containsKey("code") && jsonObject.getIntValue("code") == 0) {
+        JSONObject data = jsonObject.getJSONObject("data");
+        
+        return data.getJSONArray("resourceRoleSets").toJavaList(ResourceRoleSet.class);
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+    
+    return null;
+  }
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/vo/open/response/data/MenusResponseData.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/vo/open/response/data/MenusResponseData.java
new file mode 100644 (file)
index 0000000..6beabd2
--- /dev/null
@@ -0,0 +1,30 @@
+package com.supwisdom.institute.backend.admin.bff.api.v1.vo.open.response.data;
+
+import java.util.List;
+
+import com.supwisdom.institute.backend.admin.bff.api.v1.model.open.Menu;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class MenusResponseData implements IApiResponseData {
+  
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -3516729316884770800L;
+
+  @Getter
+  @Setter
+  private List<Menu> menus;
+
+  public static MenusResponseData of(List<Menu> menus) {
+    MenusResponseData data = new MenusResponseData();
+    
+    data.setMenus(menus);
+    
+    return data;
+  }
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/vo/open/response/data/OpenSyncRolesResponseData.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/api/v1/vo/open/response/data/OpenSyncRolesResponseData.java
new file mode 100644 (file)
index 0000000..5b8b3d3
--- /dev/null
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.admin.bff.api.v1.vo.open.response.data;
+
+import java.util.List;
+
+import com.supwisdom.institute.backend.admin.bff.api.v1.model.open.SyncRoleModel;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class OpenSyncRolesResponseData implements IApiResponseData {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 2739730369123803327L;
+  
+  @Getter
+  @Setter
+  private String applicationId;
+
+  @Getter
+  @Setter
+  private List<SyncRoleModel> roles;
+
+  public static OpenSyncRolesResponseData of(String applicationId, List<SyncRoleModel> roles) {
+    OpenSyncRolesResponseData data = new OpenSyncRolesResponseData();
+    
+    data.setRoles(roles);
+    
+    return data;
+  }
+
+}
index e5308df..a939a95 100644 (file)
@@ -1,6 +1,7 @@
 package com.supwisdom.institute.backend.common.framework.repo;
 
 import java.util.Calendar;
+import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
@@ -36,6 +37,19 @@ public interface BaseJpaRepository<E extends ABaseEntity> extends JpaRepository<
     return null;
   }
 
+  public default List<E> selectList(Map<String, Object> mapBean, Map<String, String> orderBy) {
+    
+    Specification<E> spec = convertToSpec(mapBean);
+    
+    Sort sort = convertToSort(orderBy);
+    
+    if (sort != null) {
+      return this.findAll(spec, sort);
+    }
+    
+    return this.findAll(spec);
+  }
+
   public default Page<E> selectPageList(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
     
     Specification<E> spec = convertToSpec(mapBean);
index dccfc17..a36af40 100644 (file)
@@ -1,5 +1,6 @@
 package com.supwisdom.institute.backend.common.framework.service;
 
+import java.util.List;
 import java.util.Map;
 
 import org.springframework.data.domain.Page;
@@ -10,6 +11,11 @@ import com.supwisdom.institute.backend.common.framework.repo.BaseJpaRepository;
 public abstract class ABaseService<E extends ABaseEntity, REPO extends BaseJpaRepository<E>> {
   
   public abstract REPO getRepo();
+
+
+  public List<E> selectList(Map<String, Object> mapBean, Map<String, String> orderBy) {
+    return getRepo().selectList(mapBean, orderBy);
+  }
   
   public Page<E> selectPageList(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
     
index 0d5c72d..53f3199 100644 (file)
@@ -41,6 +41,11 @@ public class Permission extends ABaseModel {
    */
   private String type;
 
+  /**
+   * 菜单图标
+   */
+  private String icon;
+
   /**
    * URL地址
    */
diff --git a/gateway/src/main/java/com/supwisdom/institute/backend/gateway/authn/model/PermissionRoleSet.java b/gateway/src/main/java/com/supwisdom/institute/backend/gateway/authn/model/PermissionRoleSet.java
new file mode 100644 (file)
index 0000000..675e657
--- /dev/null
@@ -0,0 +1,5 @@
+package com.supwisdom.institute.backend.gateway.authn.model;
+
+public class PermissionRoleSet {
+
+}
diff --git a/gateway/src/main/java/com/supwisdom/institute/backend/gateway/authn/model/ResourceRoleSet.java b/gateway/src/main/java/com/supwisdom/institute/backend/gateway/authn/model/ResourceRoleSet.java
new file mode 100644 (file)
index 0000000..2d7940c
--- /dev/null
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.gateway.authn.model;
+
+import java.util.Collection;
+
+import com.supwisdom.institute.backend.common.framework.model.ABaseModel;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class ResourceRoleSet extends ABaseModel {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -683204173918706673L;
+
+  public static final String ACCESS_ANONYMOUS = "anonymous"; // 匿名访问anonymous
+  public static final String ACCESS_AUTHENTICATE = "authenticate"; // 认证访问authenticate
+  public static final String ACCESS_AUTHORIZE = "authorize"; // 授权访问authorize
+  public static final String ACCESS_PERMIT_ALL = "permitAll"; // 允许所有permitAll
+  public static final String ACCESS_DENY_ALL = "denyAll"; // 拒绝所有denyAll
+
+  @Getter
+  @Setter
+  private String id;
+
+  /**
+   * 代码
+   */
+  @Getter
+  @Setter
+  private String code;
+
+  /**
+   * 名称
+   */
+  @Getter
+  @Setter
+  private String name;
+
+  /**
+   * 备注
+   */
+  @Getter
+  @Setter
+  private String memo;
+
+  /**
+   * 状态(1 启用,0 停用)
+   */
+  @Getter
+  @Setter
+  private String status;
+
+  /**
+   * 请求方式(GET、POST、PUT、DELETE 等)
+   */
+  @Getter
+  @Setter
+  private String method;
+
+  /**
+   * 请求路径
+   */
+  @Getter
+  @Setter
+  private String path;
+
+  /**
+   * 访问规则(匿名访问anonymous、认证访问authenticate、授权访问authorize、允许所有permitAll、拒绝所有denyAll)
+   */
+  @Getter
+  @Setter
+  private String access;
+
+  @Getter
+  @Setter
+  Collection<Role> roles;
+  
+}
diff --git a/gateway/src/main/java/com/supwisdom/institute/backend/gateway/authn/model/Route.java b/gateway/src/main/java/com/supwisdom/institute/backend/gateway/authn/model/Route.java
new file mode 100644 (file)
index 0000000..9ca66c6
--- /dev/null
@@ -0,0 +1,68 @@
+package com.supwisdom.institute.backend.gateway.authn.model;
+
+import com.supwisdom.institute.backend.common.framework.model.ABaseModel;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class Route extends ABaseModel {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 1254295553813507087L;
+
+  @Getter
+  @Setter
+  private String id;
+
+  /**
+   * 代码
+   */
+  @Getter
+  @Setter
+  private String code;
+
+  /**
+   * 名称
+   */
+  @Getter
+  @Setter
+  private String name;
+
+  /**
+   * 备注
+   */
+  @Getter
+  @Setter
+  private String memo;
+
+  /**
+   * 状态(1 启用,0 停用)
+   */
+  @Getter
+  @Setter
+  private String status;
+
+  /**
+   * 路径前缀
+   */
+  @Getter
+  @Setter
+  private String pathPrefix;
+
+  /**
+   * 路由地址
+   */
+  @Getter
+  @Setter
+  private String url;
+
+  /**
+   * 是否排除前缀
+   */
+  @Getter
+  @Setter
+  private Boolean stripPrefix;
+
+}
@@ -17,7 +17,7 @@ import org.springframework.util.ResourceUtils;
 import org.springframework.web.client.RestTemplate;
 
 @Configuration
-public class AuthnAccountRestTemplateConfig {
+public class AuthnRestTemplateConfig {
 
   @Bean
   public ClientHttpRequestFactory simpleClientHttpRequestFactory(
@@ -35,6 +35,21 @@ public class AuthnAccountRestTemplateConfig {
       return factory;
     }
     
+    SSLContextBuilder sslContextBuilder = SSLContexts.custom();
+    
+    if (trustStore == null || trustStore.isEmpty()) {
+    } else {
+      try {
+        sslContextBuilder
+          .loadTrustMaterial(
+              ResourceUtils.getFile(trustStore),
+              trustStorePassword.toCharArray()
+          );
+      } catch (Exception e) {
+        e.printStackTrace();
+      }
+    }
+    
     if (keyStore == null || keyStore.isEmpty()) {
       SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
       factory.setReadTimeout(5000);// 单位为ms
@@ -42,42 +57,35 @@ public class AuthnAccountRestTemplateConfig {
       return factory;
     } else {
       try {
-        SSLContextBuilder sslContextBuilder = SSLContexts.custom();
-        if (trustStore == null || trustStore.isEmpty()) {
-        } else {
-          sslContextBuilder
-//            .loadTrustMaterial(TrustAllStrategy.INSTANCE)
-            .loadTrustMaterial(
-                ResourceUtils.getFile(trustStore),
-                trustStorePassword.toCharArray()
-            );
-        }
-        
         sslContextBuilder
           .loadKeyMaterial(
               ResourceUtils.getFile(keyStore),
               keyStorePassword.toCharArray(),
               keyPassword.toCharArray());
-        
-        SSLContext sslContext = sslContextBuilder.build();
-    
-        SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
-            sslContext,
-            SSLConnectionSocketFactory.getDefaultHostnameVerifier());
-        
-        CloseableHttpClient httpClient = HttpClients.custom()
-            .setSSLSocketFactory(sslsf)
-            .build();
-        
-        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
-        factory.setReadTimeout(5000);// 单位为ms
-        factory.setConnectTimeout(5000);// 单位为ms
-        return factory;
       } catch (Exception e) {
         e.printStackTrace();
       }
     }
     
+    try {
+      SSLContext sslContext = sslContextBuilder.build();
+  
+      SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
+          sslContext,
+          SSLConnectionSocketFactory.getDefaultHostnameVerifier());
+      
+      CloseableHttpClient httpClient = HttpClients.custom()
+          .setSSLSocketFactory(sslsf)
+          .build();
+      
+      HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
+      factory.setReadTimeout(5000);// 单位为ms
+      factory.setConnectTimeout(5000);// 单位为ms
+      return factory;
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+    
     SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
     factory.setReadTimeout(5000);// 单位为ms
     factory.setConnectTimeout(5000);// 单位为ms
@@ -12,10 +12,10 @@ import com.alibaba.fastjson.JSONObject;
 
 @Slf4j
 @Component
-public class AuthnAccountRemoteRestTemplate {
+public class AuthnRemoteRestTemplate {
   
   @Autowired
-  private RestTemplate authnAccountRestTemplate;
+  private RestTemplate authnRestTemplate;
   
   @Value(value = "${sw-backend-base-api.uri}/v1/authn")
   private String url;
@@ -37,7 +37,7 @@ public class AuthnAccountRemoteRestTemplate {
       final String url = this.url + StringUtils.replaceEach(path, new String[] {"{username}"}, new String[] {username});
       log.debug(url);
       
-      return authnAccountRestTemplate.getForObject(url, JSONObject.class);
+      return authnRestTemplate.getForObject(url, JSONObject.class);
     } catch (Exception e) {
       e.printStackTrace();
       
@@ -45,14 +45,14 @@ public class AuthnAccountRemoteRestTemplate {
     }
   }
 
-  public JSONObject roles(String username) {
+  public JSONObject accountRoles(String username) {
 
     try {
       final String path = "/{username}/roles";
       final String url = this.url + StringUtils.replaceEach(path, new String[] {"{username}"}, new String[] {username});
       log.debug(url);
       
-      return authnAccountRestTemplate.getForObject(url, JSONObject.class);
+      return authnRestTemplate.getForObject(url, JSONObject.class);
     } catch (Exception e) {
       e.printStackTrace();
       
@@ -60,14 +60,14 @@ public class AuthnAccountRemoteRestTemplate {
     }
   }
 
-  public JSONObject applications(String username, String applicationId) {
+  public JSONObject accountApplications(String username, String applicationId) {
 
     try {
       final String path = "/{username}/applications";
       final String url = this.url + StringUtils.replaceEach(path, new String[] {"{username}"}, new String[] {username});
       log.debug(url);
       
-      return authnAccountRestTemplate.getForObject(url, JSONObject.class);
+      return authnRestTemplate.getForObject(url, JSONObject.class);
     } catch (Exception e) {
       e.printStackTrace();
       
@@ -75,14 +75,14 @@ public class AuthnAccountRemoteRestTemplate {
     }
   }
 
-  public JSONObject menus(String username, String applicationId) {
+  public JSONObject accountMenus(String username, String applicationId) {
 
     try {
       final String path = "/{username}/menus";
       final String url = this.url + StringUtils.replaceEach(path, new String[] {"{username}"}, new String[] {username});
       log.debug(url);
       
-      return authnAccountRestTemplate.getForObject(url, JSONObject.class);
+      return authnRestTemplate.getForObject(url, JSONObject.class);
     } catch (Exception e) {
       e.printStackTrace();
       
@@ -90,14 +90,14 @@ public class AuthnAccountRemoteRestTemplate {
     }
   }
 
-  public JSONObject operations(String username, String applicationId) {
+  public JSONObject accountOperations(String username, String applicationId) {
 
     try {
       final String path = "/{username}/operations";
       final String url = this.url + StringUtils.replaceEach(path, new String[] {"{username}"}, new String[] {username});
       log.debug(url);
       
-      return authnAccountRestTemplate.getForObject(url, JSONObject.class);
+      return authnRestTemplate.getForObject(url, JSONObject.class);
     } catch (Exception e) {
       e.printStackTrace();
       
@@ -105,14 +105,45 @@ public class AuthnAccountRemoteRestTemplate {
     }
   }
 
-  public JSONObject resources(String username, String applicationId) {
+  public JSONObject accountResources(String username, String applicationId) {
 
     try {
       final String path = "/{username}/resources";
       final String url = this.url + StringUtils.replaceEach(path, new String[] {"{username}"}, new String[] {username});
       log.debug(url);
       
-      return authnAccountRestTemplate.getForObject(url, JSONObject.class);
+      return authnRestTemplate.getForObject(url, JSONObject.class);
+    } catch (Exception e) {
+      e.printStackTrace();
+      
+      return defaultErrorJson(e);
+    }
+  }
+
+  public JSONObject resourceRoleSets() {
+
+    try {
+      final String path = "/resourceRoleSets";
+      final String url = this.url + path;
+      log.debug(url);
+      
+      return authnRestTemplate.getForObject(url, JSONObject.class);
+    } catch (Exception e) {
+      e.printStackTrace();
+      
+      return defaultErrorJson(e);
+    }
+  }
+
+
+  public JSONObject routes() {
+
+    try {
+      final String path = "/routes";
+      final String url = this.url + path;
+      log.debug(url);
+      
+      return authnRestTemplate.getForObject(url, JSONObject.class);
     } catch (Exception e) {
       e.printStackTrace();
       
@@ -2,30 +2,32 @@ package com.supwisdom.institute.backend.gateway.authn.service;
 
 import java.util.List;
 
+import lombok.extern.slf4j.Slf4j;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.alibaba.fastjson.JSONObject;
 import com.supwisdom.institute.backend.gateway.authn.model.Account;
-import com.supwisdom.institute.backend.gateway.authn.model.Permission;
+import com.supwisdom.institute.backend.gateway.authn.model.ResourceRoleSet;
 import com.supwisdom.institute.backend.gateway.authn.model.Role;
-import com.supwisdom.institute.backend.gateway.authn.remote.web.client.AuthnAccountRemoteRestTemplate;
+import com.supwisdom.institute.backend.gateway.authn.model.Route;
+import com.supwisdom.institute.backend.gateway.authn.remote.web.client.AuthnRemoteRestTemplate;
 
+@Slf4j
 @Service
-public class AuthnAccountService {
-  
-//  @Autowired
-//  private AuthnAccountRemoteFeignClient authnAccountRemote;
+public class AuthnService {
   
   @Autowired
-  private AuthnAccountRemoteRestTemplate authnAccountRemote;
+  private AuthnRemoteRestTemplate authnRemote;
   
   public Account account(String username) {
     
-    JSONObject jsonObject = authnAccountRemote.account(username);
+    JSONObject jsonObject = authnRemote.account(username);
     if (jsonObject == null) {
       return null;
     }
+    log.debug("{}", jsonObject.toJSONString());
     
     if (jsonObject.getIntValue("code") == 0) {
       JSONObject data = jsonObject.getJSONObject("data");
@@ -36,12 +38,13 @@ public class AuthnAccountService {
     return null;
   }
 
-  public List<Role> roles(String username) {
+  public List<Role> accountRoles(String username) {
     
-    JSONObject jsonObject = authnAccountRemote.roles(username);
+    JSONObject jsonObject = authnRemote.accountRoles(username);
     if (jsonObject == null) {
       return null;
     }
+    log.debug("{}", jsonObject.toJSONString());
     
     if (jsonObject.getIntValue("code") == 0) {
       JSONObject data = jsonObject.getJSONObject("data");
@@ -52,17 +55,35 @@ public class AuthnAccountService {
     return null;
   }
 
-  public List<Permission> menus(String username, String applicationId) {
+  public List<ResourceRoleSet> resourceRoleSets() {
+    
+    JSONObject jsonObject = authnRemote.resourceRoleSets();
+    if (jsonObject == null) {
+      return null;
+    }
+    log.debug("{}", jsonObject.toJSONString());
+    
+    if (jsonObject.getIntValue("code") == 0) {
+      JSONObject data = jsonObject.getJSONObject("data");
+      
+      return data.getJSONArray("resourceRoleSets").toJavaList(ResourceRoleSet.class);
+    }
+    
+    return null;
+  }
+
+  public List<Route> routes() {
     
-    JSONObject jsonObject = authnAccountRemote.menus(username, applicationId);
+    JSONObject jsonObject = authnRemote.routes();
     if (jsonObject == null) {
       return null;
     }
+    log.debug("{}", jsonObject.toJSONString());
     
     if (jsonObject.getIntValue("code") == 0) {
       JSONObject data = jsonObject.getJSONObject("data");
       
-      return data.getJSONArray("permissions").toJavaList(Permission.class);
+      return data.getJSONArray("routes").toJavaList(Route.class);
     }
     
     return null;
index 266dfa7..6ef6b7e 100644 (file)
@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -11,6 +12,7 @@ import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
 import org.springframework.core.Ordered;
@@ -30,14 +32,15 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.server.ServerWebExchange;
 
 import com.supwisdom.infras.security.core.userdetails.InfrasUser;
+import com.supwisdom.institute.backend.gateway.authn.model.ResourceRoleSet;
+import com.supwisdom.institute.backend.gateway.authn.model.Role;
+import com.supwisdom.institute.backend.gateway.authn.service.AuthnService;
 
 import reactor.core.publisher.Mono;
 
-//import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR;
-
 @Slf4j
 public class AccessControlGlobalFilter implements GlobalFilter, Ordered {
-
+  
   @Override
   public int getOrder() {
     return Ordered.HIGHEST_PRECEDENCE;
@@ -48,17 +51,17 @@ public class AccessControlGlobalFilter implements GlobalFilter, Ordered {
     log.debug("AccessControlGlobalFilter.filter");
     
     // 获取 请求路径 对应的 资源
-    Collection<ConfigAttribute> attributes = this.getAttributes(exchange);
-    log.debug("request's attributes is {}", attributes);
+    Collection<ConfigAttribute> configAttributes = this.getAttributes(exchange);
+    log.debug("request's attributes is {}", configAttributes);
     
     // 判断 该资源 是否需要登录才能访问
-    if (attributes == null) {
+    if (configAttributes == null || configAttributes.size() <= 0) {
       return chain.filter(exchange);  // FIXME: 
     }
     
     // 获取 当前登录用户(包括角色信息)
     
-    // 判断 登录用户 是否可以访问 该资源
+    // FIXME: 判断 登录用户 是否可以访问 该资源
     
     return ReactiveSecurityContextHolder.getContext()
         .filter(c -> {
@@ -72,7 +75,32 @@ public class AccessControlGlobalFilter implements GlobalFilter, Ordered {
           
           boolean hasPermission = false;
           
-          for (ConfigAttribute ca : attributes) {
+          ConfigAttribute ca;
+          String needRole;
+          for (Iterator<ConfigAttribute> iter = configAttributes.iterator(); iter.hasNext();) {
+            ca = iter.next();
+            needRole = ca.getAttribute();
+            
+            if (needRole == null || needRole.isEmpty()) {
+              continue;
+            }
+            
+            if (needRole.startsWith("ACCESS_")) {
+              String access = needRole.substring("ACCESS_".length()); log.debug("Access is {}", access);
+              if ("anonymous".equals(access)) {
+                hasPermission = false;
+              } else if ("authenticate".equals(access)) {
+                hasPermission = true;
+              } else if ("permitAll".equals(access)) {
+                hasPermission = true;
+              } else if ("denyAll".equals(access)) {
+                hasPermission = false;
+              } else {
+                hasPermission = false;
+              }
+              break;
+            }
+            
             hasPermission = infrasUser.getRoles().contains(ca.getAttribute());
             if (hasPermission) {
               log.debug("match attribute is {}", ca.getAttribute());
@@ -81,35 +109,83 @@ public class AccessControlGlobalFilter implements GlobalFilter, Ordered {
           }
           
           if (!hasPermission) {
-            throw new RuntimeException("no permission");
+            throw new RuntimeException("no right");
           }
           
           return exchange;
         })
         .flatMap(ex -> chain.filter(ex));
   }
-  
+
+  @Autowired
+  private AuthnService authnService;
+
   private Map<RequestMatcher, Collection<ConfigAttribute>> requestMap = new ConcurrentHashMap<RequestMatcher, Collection<ConfigAttribute>>();
 
-  @Scheduled(initialDelayString = "${sw-backend-gateway.resource.refresh-delay:10000}", fixedDelayString = "${sw-backend-gateway.resource.refresh-delay:10000}")
+  @Scheduled(
+      initialDelayString = "${sw-backend-gateway.resource.refresh-delay:200}", 
+      fixedDelayString = "${sw-backend-gateway.resource.refresh-delay:10000}")
   protected void refreshRequestMap() {
     
     log.debug("AccessControlGlobalFilter.refreshRequestMap");
     
+    requestMap.clear();
     loadRequestMap();
   }
 
   // 定时刷新 资源 与 可访问角色 的 Map
   private void loadRequestMap() {
-    requestMap.clear();
-      
-    AntPathRequestMatcher requestMatcher0 = new AntPathRequestMatcher("/api/**");
-    Collection<ConfigAttribute> attributes0 = new ArrayList<ConfigAttribute>();
-    attributes0.add(new SecurityConfig("user"));
-    requestMap.put(requestMatcher0, attributes0);
-    
-    // FIXME: 从 后端接口 加载
+
+    if (requestMap.isEmpty()) {
+//    AntPathRequestMatcher requestMatcher0 = new AntPathRequestMatcher("/api/**");
+//    Collection<ConfigAttribute> attributes0 = new ArrayList<ConfigAttribute>();
+//    attributes0.add(new SecurityConfig("user"));
+//    requestMap.put(requestMatcher0, attributes0);
     
+      // 从 后端接口 加载
+      List<ResourceRoleSet> resourceRoleSets = authnService.resourceRoleSets();
+      if (resourceRoleSets != null) {
+        for (ResourceRoleSet resourceRoleSet : resourceRoleSets) {
+          String method = resourceRoleSet.getMethod();
+          String path = resourceRoleSet.getPath();
+          String access = resourceRoleSet.getAccess();
+          
+          final RequestMatcher requestMatcher = new AntPathRequestMatcher(path, method);
+          
+          Collection<ConfigAttribute> attributes = new ArrayList<ConfigAttribute>();
+          
+          if (access != null) {
+            if (access.equals(ResourceRoleSet.ACCESS_ANONYMOUS)) {
+              attributes.add(new SecurityConfig("ACCESS_"+ResourceRoleSet.ACCESS_ANONYMOUS));
+            } else if (access.equals(ResourceRoleSet.ACCESS_AUTHENTICATE)) {
+              attributes.add(new SecurityConfig("ACCESS_"+ResourceRoleSet.ACCESS_AUTHENTICATE));
+            } else if (access.equals(ResourceRoleSet.ACCESS_AUTHORIZE)) {
+              for (Role r : resourceRoleSet.getRoles()) {
+                ConfigAttribute ca = new SecurityConfig(r.getCode());
+                attributes.add(ca);
+              }
+            } else if (access.equals(ResourceRoleSet.ACCESS_PERMIT_ALL)) {
+              attributes.add(new SecurityConfig("ACCESS_"+ResourceRoleSet.ACCESS_PERMIT_ALL));
+            } else if (access.equals(ResourceRoleSet.ACCESS_DENY_ALL)) {
+              attributes.add(new SecurityConfig("ACCESS_"+ResourceRoleSet.ACCESS_DENY_ALL));
+            } else {
+              for (Role r : resourceRoleSet.getRoles()) {
+                ConfigAttribute ca = new SecurityConfig(r.getCode());
+                attributes.add(ca);
+              }
+            }
+          } else {
+            for (Role r : resourceRoleSet.getRoles()) {
+              ConfigAttribute ca = new SecurityConfig(r.getCode());
+              attributes.add(ca);
+            }
+          }
+          
+          requestMap.put(requestMatcher, attributes);
+        }
+      }
+      
+    }
 
   }
   
index ef7d0e2..8a30025 100644 (file)
@@ -16,7 +16,7 @@ import org.springframework.security.crypto.password.PasswordEncoder;
 
 import com.supwisdom.institute.backend.gateway.authn.model.Account;
 import com.supwisdom.institute.backend.gateway.authn.model.Role;
-import com.supwisdom.institute.backend.gateway.authn.service.AuthnAccountService;
+import com.supwisdom.institute.backend.gateway.authn.service.AuthnService;
 
 import reactor.core.publisher.Mono;
 import lombok.extern.slf4j.Slf4j;
@@ -28,7 +28,7 @@ public class MyUserDetailsService implements UserDetailsService, ReactiveUserDet
   PasswordEncoder passwordEncoder;
 
   @Autowired
-  AuthnAccountService authnAccountService;
+  AuthnService authnAccountService;
   
   @Override
   public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // TODO: 
@@ -56,7 +56,7 @@ public class MyUserDetailsService implements UserDetailsService, ReactiveUserDet
       throw new UsernameNotFoundException(String.format("%s not found", username));
     }
     
-    List<Role> roles = authnAccountService.roles(username);
+    List<Role> roles = authnAccountService.accountRoles(username);
     
     List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
     for (Role role : roles) {
index c72cbc7..1f3be47 100644 (file)
@@ -44,7 +44,7 @@ spring:
         filters:
         - RewritePath=/api/system/(?<suffix>.*), /$\{suffix}
       - id: biz-api
-        uri: http://localhost:8082
+        uri: http://localhost:8083
         predicates:
         - Path=/api/biz/**
         filters:
@@ -72,14 +72,13 @@ infras.security.jwt.reactive.enabled: true
 
 infras.security.jwt.public-key-pem: |-
   -----BEGIN PUBLIC KEY-----
-  MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBQw6TmvJ+nOuRaLoHsZJGIBzRg/wbskNv6UevL3/nQioYooptPfdIHVzPiKRVT5+DW5+nqzav3DOxY+HYKjO9nFjYdj0sgvRae6iVpa5Ji1wbDKOvwIDNukgnKbqvFXX2Isfl0RxeN3uEKdjeFGGFdr38I3ADCNKFNxtbmfqvjQIDAQAB
+  MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgzXhvHLKypr+G+gJgOJNt8Lu8ygFFCU0eO4qJ4j2vDzpGwTOWKmD/u7dwIWKyHR43hUSN+FN4SSy1AmHjEKxz0btm7Cki+0YFw0BE4/mB/0wPD251wOS3w0CLsRTfoov9OaGaXApjVSMM74aIX8D46CbwHioLHdAj0/jlVU6gZQIDAQAB
   -----END PUBLIC KEY-----
 infras.security.jwt.private-key-pem-pkcs8: |-
   -----BEGIN PRIVATE KEY-----
-  MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMFDDpOa8n6c65FougexkkYgHNGD/BuyQ2/pR68vf+dCKhiiim0990gdXM+IpFVPn4Nbn6erNq/cM7Fj4dgqM72cWNh2PSyC9Fp7qJWlrkmLXBsMo6/AgM26SCcpuq8VdfYix+XRHF43e4Qp2N4UYYV2vfwjcAMI0oU3G1uZ+q+NAgMBAAECgYA7jA7UuhxXmMAYmJ0hO7xnMQPQJouqeP3AYK9+sfMF7WQNHR/r0vj7Vli/dUm1I4hxr+x8fAuomf+ve6gds7sm+v2JHLzEIyPPiogoC7IcBmjJ3yVzW/26cXeOmTiPC/fW2g4BpYxSM8HLDaSkrtqzy8e9ijlzMpHBvvwLikufnQJBAOXaqIPuZ7Vm/JwQHAmX2HV+Qk6GMi/H7mL8X0AaW68w+Iccdbz1hzmMBfdn5NMmx2AOwoBAVivgjt0a1OfksHMCQQDXPtXxwFy4dQ4TbPu8L38P8s/bPo9ib1YkEMp57yBw+IvxB7jnpA9rUYTfZM/HpVP7r9rfVEUylVXXzhz1qx//AkEApWJOTBdW8bQ3YEdLFS/3pJqDNSLjq3OMuBZkpqgQfh6bRAQbRynW8XYpuNk9URye6iPUmRkxp4J86ORseqoWtwJAJb5a/b1hhObhxP5DVkht23oUgLmDoxsq28AmASOxaJ3szCMyhUv7eDIfPp0K4lNXWrcHhkncqHYPS3xVD68mOQJAV4SRDdWpgAbQOUODotohE48RxrabHo0l228CJ/pnm0q7gplPs4iSNJ2eijFuOMXfKkq3z/vxiNSA59FcdoCOHQ==
+  MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKDNeG8csrKmv4b6AmA4k23wu7zKAUUJTR47ioniPa8POkbBM5YqYP+7t3AhYrIdHjeFRI34U3hJLLUCYeMQrHPRu2bsKSL7RgXDQETj+YH/TA8PbnXA5LfDQIuxFN+ii/05oZpcCmNVIwzvhohfwPjoJvAeKgsd0CPT+OVVTqBlAgMBAAECgYAtNxlyROOKkJCyZ4JbhA0QkOx5PWP2AZOJuLxP4SnvG50LYDAdPXVg82u1P+38n2truTF5qiXuYMUNcMoNixayWEZ074kVTI+FluLO405wwMYHvGPKOJVFIUTsKz+xkg4r48R963D5DZ6ZjoPIjLWvxL1zdrsgi9AOz/skAl0yAQJBANO0yadz1fYinSmYa2O27lgE1DpTvYBXGkY2qG7D/QJv2FwP6pdBy9ejym45UXce4wR1Yrlvh9wsErI4p790XOECQQDCcjti2nbIuZP3Dy5Ej97Y6sIbIEu5MpJW8kBjUzUssxgdE9urA/yWVzT8lmj34he+uWJv6s+e/HBDV5tc0tAFAkBK+q2s4+a0jN/SuovWPhS+Eb/EhKIKEU9Z7MPMrxctxMUBHhX8yi3SyszIKv7CTKskihqUCH86qFVaz5wBv8mhAkBgnQea13ebxnGZmSZhFKciWoq1lbdqPpFtuBJ8B5TtL9N0ZzCHaYSwYoZGVqmzONiZgF1DxIUCtuVE4JumZGzNAkB5B1sUdZfLo4q3jOiX5UQ/a4u17ptemvFPR4OynHkuVkgyAfTIo9SAB8/KIntHMlrgcP03G41ciJrYeP5zv8xm
   -----END PRIVATE KEY-----
 
-
 ##
 # infras.security cas
 #
index d27bd71..750d82d 100644 (file)
@@ -229,6 +229,7 @@ CREATE TABLE `TB_BASE_PERMISSION` (
   `STATUS` VARCHAR(10) NOT NULL COMMENT '状态(1 启用,0 停用)',
 
   `TYPE_` VARCHAR(10) NOT NULL COMMENT '类型(1 应用,2 菜单,3 操作)',
+  `ICON` VARCHAR(500) COMMENT '菜单图标',
   `URL` VARCHAR(500) COMMENT 'URL地址',
 
   `APPLICATION_ID` VARCHAR(100) COMMENT '系统ID', 
@@ -283,6 +284,7 @@ CREATE TABLE `TB_BASE_RESOURCE` (
 
   `METHOD` VARCHAR(100) COMMENT '请求方式(GET、POST、PUT、DELETE 等)',
   `PATH` VARCHAR(500) COMMENT '请求地址',
+  `ACCESS` VARCHAR(100) COMMENT '访问规则(匿名访问anonymous、认证访问authenticate、授权访问authorize、允许所有permitAll、拒绝所有denyAll)',
 
   PRIMARY KEY (`ID`),
   UNIQUE KEY `UQ_CODE` (`COMPANY_ID`,`CODE`)
@@ -306,7 +308,7 @@ CREATE TABLE `TB_BASE_PERMISSION_RESOURCE` (
Content-type: text/html Supwisdom Source - institute/sw-backend.git/commitdiff


500 - Internal Server Error

Unknown encoding 'gb18030' at /usr/local/share/gitweb/gitweb.cgi line 1539