diff --git a/internal/web/actions/default/admins/admin.go b/internal/web/actions/default/admins/admin.go index 79bb9ca7..cb8408ee 100644 --- a/internal/web/actions/default/admins/admin.go +++ b/internal/web/actions/default/admins/admin.go @@ -45,6 +45,7 @@ func (this *AdminAction) RunGet(params struct { "isOn": admin.IsOn, "isSuper": admin.IsSuper, "canLogin": admin.CanLogin, + "hasWeakPassword": admin.HasWeakPassword, "countAccessKeys": countAccessKeys, } diff --git a/internal/web/actions/default/admins/index.go b/internal/web/actions/default/admins/index.go index e9782da8..49a18912 100644 --- a/internal/web/actions/default/admins/index.go +++ b/internal/web/actions/default/admins/index.go @@ -15,34 +15,46 @@ func (this *IndexAction) Init() { this.Nav("", "", "") } -func (this *IndexAction) RunGet(params struct{}) { - countResp, err := this.RPC().AdminRPC().CountAllEnabledAdmins(this.AdminContext(), &pb.CountAllEnabledAdminsRequest{}) - if err != nil { - this.ErrorPage(err) - return - } - page := this.NewPage(countResp.Count) - this.Data["page"] = page.AsHTML() +func (this *IndexAction) RunGet(params struct { + Keyword string + HasWeakPassword bool +}) { + this.Data["keyword"] = params.Keyword + this.Data["hasWeakPassword"] = params.HasWeakPassword - adminsResp, err := this.RPC().AdminRPC().ListEnabledAdmins(this.AdminContext(), &pb.ListEnabledAdminsRequest{ - Offset: page.Offset, - Size: page.Size, + countResp, err := this.RPC().AdminRPC().CountAllEnabledAdmins(this.AdminContext(), &pb.CountAllEnabledAdminsRequest{ + Keyword: params.Keyword, + HasWeakPassword: params.HasWeakPassword, }) if err != nil { this.ErrorPage(err) return } - adminMaps := []maps.Map{} + var page = this.NewPage(countResp.Count) + this.Data["page"] = page.AsHTML() + + adminsResp, err := this.RPC().AdminRPC().ListEnabledAdmins(this.AdminContext(), &pb.ListEnabledAdminsRequest{ + Keyword: params.Keyword, + HasWeakPassword: params.HasWeakPassword, + Offset: page.Offset, + Size: page.Size, + }) + if err != nil { + this.ErrorPage(err) + return + } + var adminMaps = []maps.Map{} for _, admin := range adminsResp.Admins { adminMaps = append(adminMaps, maps.Map{ - "id": admin.Id, - "isOn": admin.IsOn, - "isSuper": admin.IsSuper, - "username": admin.Username, - "fullname": admin.Fullname, - "createdTime": timeutil.FormatTime("Y-m-d H:i:s", admin.CreatedAt), - "otpLoginIsOn": admin.OtpLogin != nil && admin.OtpLogin.IsOn, - "canLogin": admin.CanLogin, + "id": admin.Id, + "isOn": admin.IsOn, + "isSuper": admin.IsSuper, + "username": admin.Username, + "fullname": admin.Fullname, + "createdTime": timeutil.FormatTime("Y-m-d H:i:s", admin.CreatedAt), + "otpLoginIsOn": admin.OtpLogin != nil && admin.OtpLogin.IsOn, + "canLogin": admin.CanLogin, + "hasWeakPassword": admin.HasWeakPassword, }) } this.Data["admins"] = adminMaps diff --git a/internal/web/actions/default/dashboard/index.go b/internal/web/actions/default/dashboard/index.go index 68f216f1..897c78b6 100644 --- a/internal/web/actions/default/dashboard/index.go +++ b/internal/web/actions/default/dashboard/index.go @@ -276,5 +276,13 @@ func (this *IndexAction) RunPost(params struct{}) { } } + // 弱密码提示 + countWeakAdminsResp, err := this.RPC().AdminRPC().CountAllEnabledAdmins(this.AdminContext(), &pb.CountAllEnabledAdminsRequest{HasWeakPassword: true}) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["countWeakAdmins"] = countWeakAdminsResp.Count + this.Success() } diff --git a/web/views/@default/admins/createPopup.html b/web/views/@default/admins/createPopup.html index 0fd951d8..e12c547e 100644 --- a/web/views/@default/admins/createPopup.html +++ b/web/views/@default/admins/createPopup.html @@ -33,17 +33,17 @@ - 是否允许登录 + 允许登录 -

选中后才可以登录当前的管理平台。

+

选中后,当前管理员才可以登录当前的管理平台。

- 是否为超级管理员 + 超级管理员 -

超级管理员自动拥有所有的管理权限。

+

选中后,表示当前管理员为超级管理员;超级管理员自动拥有所有的管理权限。

diff --git a/web/views/@default/admins/index.html b/web/views/@default/admins/index.html index 579dc838..07c0c224 100644 --- a/web/views/@default/admins/index.html +++ b/web/views/@default/admins/index.html @@ -1,7 +1,30 @@ {$layout} {$template "menu"} - +
+ +
+
+ +
+
+ +   + [清除条件] +
+
+ + +
+
+

暂时还没有跟关键词匹配管理员。

+
+ +
+ 当前正在筛选弱密码管理员 +
+ +
@@ -13,12 +36,13 @@ - - + - + - + diff --git a/web/views/@default/dashboard/index.html b/web/views/@default/dashboard/index.html index 9ec013d5..0a24ad1b 100644 --- a/web/views/@default/dashboard/index.html +++ b/web/views/@default/dashboard/index.html @@ -50,6 +50,13 @@ + +
+ + 安全提醒:有 {{countWeakAdmins}} 个管理员登录账号正在使用弱密码,请及时修改密码,避免产生安全风险。 + +
+
diff --git a/web/views/@default/dashboard/index.js b/web/views/@default/dashboard/index.js index e46af043..74450cc0 100644 --- a/web/views/@default/dashboard/index.js +++ b/web/views/@default/dashboard/index.js @@ -4,6 +4,7 @@ Tea.context(function () { this.metricCharts = [] this.dashboard = {} this.localLowerVersionAPINode = null + this.countWeakAdmins = 0 this.$delay(function () { this.$post("$")
用户名
{{admin.username}} -
- 超级管理员 +
{{admin.username}} +
+ 超级管理员 + 弱密码
{{admin.fullname}}{{admin.fullname}} Y N diff --git a/web/views/@default/admins/index.js b/web/views/@default/admins/index.js index b0820c9e..bbf8755e 100644 --- a/web/views/@default/admins/index.js +++ b/web/views/@default/admins/index.js @@ -1,7 +1,7 @@ Tea.context(function () { this.createAdmin = function () { teaweb.popup("/admins/createPopup", { - height: "22em", + height: "30em", callback: function () { teaweb.success("保存成功", function () { teaweb.reload() diff --git a/web/views/@default/admins/update.html b/web/views/@default/admins/update.html index adf6e8d6..b573dd69 100644 --- a/web/views/@default/admins/update.html +++ b/web/views/@default/admins/update.html @@ -33,17 +33,17 @@
是否允许登录允许登录 -

选中后才可以登录当前的管理平台。

+

选中后,当前管理员才可以登录当前的管理平台。

是否为超级管理员超级管理员 -

超级管理员自动拥有所有的管理权限。

+

选中后,表示当前管理员为超级管理员;超级管理员自动拥有所有的管理权限。