From d51945040585c92661e91f5bb7a75ff4b95096a5 Mon Sep 17 00:00:00 2001 From: devezhao <> Date: Mon, 19 Jul 2021 23:53:01 +0800 Subject: [PATCH] auth --- @rbv | 2 +- pom.xml | 10 +++ .../java/com/rebuild/api/user/LoginToken.java | 2 +- .../rebuild/core/metadata/EntityHelper.java | 1 + .../web/admin/ConfigurationController.java | 4 +- .../com/rebuild/web/user/UserSettings.java | 38 ++++++++++- src/main/resources/i18n/lang.zh_CN.json | 2 +- src/main/resources/metadata-conf.xml | 9 +++ src/main/resources/scripts/db-init.sql | 13 +++- src/main/resources/scripts/db-upgrade.sql | 12 ++++ .../resources/web/admin/admin-verify.html | 2 +- .../web/admin/integration/dingtalk.html | 4 +- .../web/admin/integration/wxwork.html | 8 +-- .../resources/web/assets/img/dingtalk256.png | Bin 0 -> 5889 bytes .../resources/web/assets/img/rebuild256.png | Bin 0 -> 9246 bytes .../resources/web/assets/img/wxwork256.png | Bin 0 -> 6366 bytes .../web/assets/js/bizuser/user-view.js | 2 +- .../resources/web/assets/js/user-settings.js | 16 +++++ src/main/resources/web/error/error.html | 3 + .../resources/web/settings/user-settings.html | 60 ++++++++++++------ 20 files changed, 155 insertions(+), 33 deletions(-) create mode 100644 src/main/resources/web/assets/img/dingtalk256.png create mode 100644 src/main/resources/web/assets/img/rebuild256.png create mode 100644 src/main/resources/web/assets/img/wxwork256.png diff --git a/@rbv b/@rbv index 276e88e13..300eb4e69 160000 --- a/@rbv +++ b/@rbv @@ -1 +1 @@ -Subproject commit 276e88e1327caf8f6dcc9b08c16ba7b67010e396 +Subproject commit 300eb4e694d946fa497276d05cc59d6a40be8c13 diff --git a/pom.xml b/pom.xml index c646c7745..e7799c130 100644 --- a/pom.xml +++ b/pom.xml @@ -421,5 +421,15 @@ oshi-core 5.8.0 + + + + local + dingtalk-sdk + 20210719 + system + ${basedir}/.deps/taobao-sdk-java-auto_1479188381469-20210716.jar + + diff --git a/src/main/java/com/rebuild/api/user/LoginToken.java b/src/main/java/com/rebuild/api/user/LoginToken.java index 00d96cbcf..ccff6d272 100644 --- a/src/main/java/com/rebuild/api/user/LoginToken.java +++ b/src/main/java/com/rebuild/api/user/LoginToken.java @@ -58,7 +58,7 @@ public class LoginToken extends BaseApi { * * @param user * @param password - * @return + * @return 返回 null 表示成功 */ public static String checkUser(String user, String password) { if (!Application.getUserStore().existsUser(user)) { diff --git a/src/main/java/com/rebuild/core/metadata/EntityHelper.java b/src/main/java/com/rebuild/core/metadata/EntityHelper.java index 7e967feb0..8f3807120 100644 --- a/src/main/java/com/rebuild/core/metadata/EntityHelper.java +++ b/src/main/java/com/rebuild/core/metadata/EntityHelper.java @@ -177,6 +177,7 @@ public class EntityHelper { public static final int RoleMember = 5; public static final int Team = 6; public static final int TeamMember = 7; + public static final int ExternalUser = 8; // 配置 diff --git a/src/main/java/com/rebuild/web/admin/ConfigurationController.java b/src/main/java/com/rebuild/web/admin/ConfigurationController.java index d7f8afb17..63f4fd938 100644 --- a/src/main/java/com/rebuild/web/admin/ConfigurationController.java +++ b/src/main/java/com/rebuild/web/admin/ConfigurationController.java @@ -297,7 +297,7 @@ public class ConfigurationController extends BaseController { } } - String homeUrl = RebuildConfiguration.getHomeUrl(); + String homeUrl = RebuildConfiguration.getHomeUrl("/user/dingtalk"); mv.getModel().put("_DingtalkHomeUrl", homeUrl); return mv; @@ -329,7 +329,7 @@ public class ConfigurationController extends BaseController { } } - String homeUrl = RebuildConfiguration.getHomeUrl(); + String homeUrl = RebuildConfiguration.getHomeUrl("/user/wxwork"); mv.getModel().put("_WxworkHomeUrl", homeUrl); mv.getModel().put("_WxworkAuthCallUrl", homeUrl.split("//")[1].split("/")[0]); diff --git a/src/main/java/com/rebuild/web/user/UserSettings.java b/src/main/java/com/rebuild/web/user/UserSettings.java index 414779b6e..f8ae3aec5 100644 --- a/src/main/java/com/rebuild/web/user/UserSettings.java +++ b/src/main/java/com/rebuild/web/user/UserSettings.java @@ -15,7 +15,10 @@ import com.rebuild.api.RespBody; import com.rebuild.core.Application; import com.rebuild.core.metadata.EntityHelper; import com.rebuild.core.privileges.UserService; +import com.rebuild.core.privileges.bizz.User; import com.rebuild.core.service.DataSpecificationException; +import com.rebuild.core.support.ConfigurationItem; +import com.rebuild.core.support.RebuildConfiguration; import com.rebuild.core.support.VerfiyCode; import com.rebuild.core.support.i18n.I18nUtils; import com.rebuild.core.support.i18n.Language; @@ -41,7 +44,25 @@ public class UserSettings extends EntityController { @GetMapping("/user") public ModelAndView pageUser(HttpServletRequest request) { ModelAndView mv = createModelAndView("/settings/user-settings"); - mv.getModelMap().put("user", Application.getUserStore().getUser(getRequestUser(request))); + + User user = Application.getUserStore().getUser(getRequestUser(request)); + mv.getModelMap().put("user", user); + + if (RebuildConfiguration.get(ConfigurationItem.DingtalkCorpid) != null) { + Object[] dingtalkUser = Application.createQueryNoFilter( + "select user from ExternalUser where bindUser = ? and appType = 1") + .setParameter(1, user.getId()) + .unique(); + if (dingtalkUser != null) mv.getModelMap().put("dingtalkUser", dingtalkUser[0]); + } + if (RebuildConfiguration.get(ConfigurationItem.WxworkCorpid) != null) { + Object[] wxworkUser = Application.createQueryNoFilter( + "select user from ExternalUser where bindUser = ? and appType = 2") + .setParameter(1, user.getId()) + .unique(); + if (wxworkUser != null) mv.getModelMap().put("wxworkUser", wxworkUser[0]); + } + return mv; } @@ -146,4 +167,19 @@ public class UserSettings extends EntityController { } return RespBody.ok(); } + + @PostMapping("/cancel-external-user") + public RespBody cancelExternalUser(HttpServletRequest request) { + int appType = getIntParameter(request, "type", 0); + Object[] externalUser = Application.createQueryNoFilter( + "select userId from ExternalUser where bindUser = ? and appType = ?") + .setParameter(1, getRequestUser(request)) + .setParameter(2, appType) + .unique(); + if (externalUser != null) { + Application.getCommonsService().delete((ID) externalUser[0]); + } + + return RespBody.ok(); + } } diff --git a/src/main/resources/i18n/lang.zh_CN.json b/src/main/resources/i18n/lang.zh_CN.json index 3b4fa345b..768b79198 100644 --- a/src/main/resources/i18n/lang.zh_CN.json +++ b/src/main/resources/i18n/lang.zh_CN.json @@ -1260,7 +1260,7 @@ "短信签名":"短信签名", "短信账户未配置或配置错误":"短信账户未配置或配置错误", "确定":"确定", - "确定要禁用此用户吗?":"确定要禁用此用户吗?", + "确认要禁用此用户吗?":"确认要禁用此用户吗?", "确认删除当前记录吗?":"确认删除当前记录吗?", "确认删除此仪表盘?":"确认删除此仪表盘?", "确认删除此任务?":"确认删除此任务?", diff --git a/src/main/resources/metadata-conf.xml b/src/main/resources/metadata-conf.xml index 85ddcf39c..103e52dea 100644 --- a/src/main/resources/metadata-conf.xml +++ b/src/main/resources/metadata-conf.xml @@ -75,6 +75,15 @@ + + + + + + + + + diff --git a/src/main/resources/scripts/db-init.sql b/src/main/resources/scripts/db-init.sql index 15abc3384..b07886ffd 100644 --- a/src/main/resources/scripts/db-init.sql +++ b/src/main/resources/scripts/db-init.sql @@ -112,6 +112,17 @@ create table if not exists `team_member` ( unique index UIX0_team_member (`TEAM_ID`, `USER_ID`) )Engine=InnoDB; +-- ************ Entity [ExternalUser] DDL ************ +create table if not exists `external_user` ( + `USER_ID` char(20) not null, + `USER` varchar(100) not null, + `APP_ID` varchar(100) not null, + `APP_TYPE` smallint(6) not null default '1' comment '1=DingTalk,2=WxWork', + `BIND_USER` char(20) not null, + primary key (`USER_ID`), + unique index UIX0_external_user (`BIND_USER`, `USER`) +)Engine=InnoDB; + -- ************ Entity [MetaEntity] DDL ************ create table if not exists `meta_entity` ( `ENTITY_ID` char(20) not null, @@ -790,4 +801,4 @@ insert into `project_plan_config` (`CONFIG_ID`, `PROJECT_ID`, `PLAN_NAME`, `SEQ` -- DB Version (see `db-upgrade.sql`) insert into `system_config` (`CONFIG_ID`, `ITEM`, `VALUE`) - values ('021-9000000000000001', 'DBVer', 36); + values ('021-9000000000000001', 'DBVer', 37); diff --git a/src/main/resources/scripts/db-upgrade.sql b/src/main/resources/scripts/db-upgrade.sql index e428e286a..72428e305 100644 --- a/src/main/resources/scripts/db-upgrade.sql +++ b/src/main/resources/scripts/db-upgrade.sql @@ -1,6 +1,18 @@ -- Database upgrade scripts for rebuild 1.x and 2.x -- Each upgraded starts with `-- #VERSION` +-- #37 (v2.5) +-- ************ Entity [ExternalUser] DDL ************ +create table if not exists `external_user` ( + `USER_ID` char(20) not null, + `USER` varchar(100) not null, + `APP_ID` varchar(100) not null, + `APP_TYPE` smallint(6) not null default '1' comment '1=DingTalk,2=WxWork', + `BIND_USER` char(20) not null, + primary key (`USER_ID`), + unique index UIX0_external_user (`BIND_USER`, `USER`) +)Engine=InnoDB; + -- #36 (v2.4) -- ************ Entity [FrontjsCode] DDL ************ create table if not exists `frontjs_code` ( diff --git a/src/main/resources/web/admin/admin-verify.html b/src/main/resources/web/admin/admin-verify.html index 06b70b6ae..bc86444a8 100644 --- a/src/main/resources/web/admin/admin-verify.html +++ b/src/main/resources/web/admin/admin-verify.html @@ -6,7 +6,7 @@ diff --git a/src/main/resources/web/admin/integration/dingtalk.html b/src/main/resources/web/admin/integration/dingtalk.html index b55067767..468b43262 100644 --- a/src/main/resources/web/admin/integration/dingtalk.html +++ b/src/main/resources/web/admin/integration/dingtalk.html @@ -19,7 +19,7 @@ [[${bundle.L('修改')}]]
-
[[${bundle.L('接口调用凭证')}]]
+
[[${bundle.L('接口凭证')}]]
@@ -44,7 +44,7 @@
- + diff --git a/src/main/resources/web/admin/integration/wxwork.html b/src/main/resources/web/admin/integration/wxwork.html index 469137202..b643d79db 100644 --- a/src/main/resources/web/admin/integration/wxwork.html +++ b/src/main/resources/web/admin/integration/wxwork.html @@ -19,7 +19,7 @@ [[${bundle.L('修改')}]]
-
[[${bundle.L('接口调用凭证')}]]
+
[[${bundle.L('接口凭证')}]]
应用首页地址[[${bundle.L('应用首页地址')}]] [[${_DingtalkHomeUrl}]]
@@ -31,7 +31,7 @@ - + @@ -40,11 +40,11 @@
[[${WxworkSecret ?:bundle.L('未设置')}]]
企业 ID[[${bundle.L('企业 ID')}]] [[${WxworkCorpid ?:bundle.L('未设置')}]]
- + - + diff --git a/src/main/resources/web/assets/img/dingtalk256.png b/src/main/resources/web/assets/img/dingtalk256.png new file mode 100644 index 0000000000000000000000000000000000000000..b6bc1da820dbd86fd59e2f429a8ca08b88743a94 GIT binary patch literal 5889 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 D#naO< literal 0 HcmV?d00001 diff --git a/src/main/resources/web/assets/img/rebuild256.png b/src/main/resources/web/assets/img/rebuild256.png new file mode 100644 index 0000000000000000000000000000000000000000..e6be7882b756e5a663f927f52b5fa606228c0f8f GIT binary patch literal 9246 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 Jw9Dhve*lnL_PYQ8 literal 0 HcmV?d00001 diff --git a/src/main/resources/web/assets/img/wxwork256.png b/src/main/resources/web/assets/img/wxwork256.png new file mode 100644 index 0000000000000000000000000000000000000000..e222973fd674df46fa27c3c293981cdc9febbee6 GIT binary patch literal 6366 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/web/assets/js/bizuser/user-view.js b/src/main/resources/web/assets/js/bizuser/user-view.js index f4cc235f1..e181af833 100644 --- a/src/main/resources/web/assets/js/bizuser/user-view.js +++ b/src/main/resources/web/assets/js/bizuser/user-view.js @@ -35,7 +35,7 @@ $(document).ready(function () { }) $('.J_disable').click(() => { - RbAlert.create($L('确定要禁用此用户吗?'), { + RbAlert.create($L('确认要禁用此用户吗?'), { confirmText: $L('禁用'), confirm: function () { toggleDisabled(true, this) diff --git a/src/main/resources/web/assets/js/user-settings.js b/src/main/resources/web/assets/js/user-settings.js index 904a90e13..857337d12 100644 --- a/src/main/resources/web/assets/js/user-settings.js +++ b/src/main/resources/web/assets/js/user-settings.js @@ -50,6 +50,22 @@ $(document).ready(function () { }) }) + const $unauth = $('.J_unauth-dingtalk, .J_unauth-wxwork').on('click', () => { + RbAlert.create($L('确认要取消授权吗?'), { + confirm: function () { + this.hide() + $.post(`/settings/cancel-external-user?type=${$unauth.data('type')}`, (res) => { + if (res.error_code === 0) { + location.hash = 'secure' + location.reload() + } else { + RbHighbar.create(res.error_msg) + } + }) + }, + }) + }) + // load log $('a.nav-link[href="#logs"]').click(() => { diff --git a/src/main/resources/web/error/error.html b/src/main/resources/web/error/error.html index 62a8752a3..af20990a9 100644 --- a/src/main/resources/web/error/error.html +++ b/src/main/resources/web/error/error.html @@ -22,6 +22,9 @@ color: #fbbc05; font-size: 5rem; } + .rb-error .error-container { + max-width: 801px; + } .error-description > pre:empty { display: none; } diff --git a/src/main/resources/web/settings/user-settings.html b/src/main/resources/web/settings/user-settings.html index 19e79546d..2dfdf424e 100644 --- a/src/main/resources/web/settings/user-settings.html +++ b/src/main/resources/web/settings/user-settings.html @@ -99,20 +99,20 @@
- -
+ +
- -
+ +
- -
+ +
@@ -122,14 +122,20 @@
- -
- + +
+
- -
+ +
-
+
@@ -152,23 +158,41 @@
- -
+ +
-
+
- -
+ +
[[${bundle.L('建议 90 天更改一次密码')}]]
-
+
+
+ +
+
[[${dingtalkUser}]]
+
+
+ +
+
+
+ +
+
[[${wxworkUser}]]
+
+
+ +
+
应用主页[[${bundle.L('应用主页')}]] [[${_WxworkHomeUrl}]]
授权回调域[[${bundle.L('可信域名')}]] [[${_WxworkAuthCallUrl}]]