diff --git a/server/api/admin/imconfiginternal/im_config.go b/server/api/admin/imconfiginternal/im_config.go
index d36b5b5..2c495a3 100644
--- a/server/api/admin/imconfiginternal/im_config.go
+++ b/server/api/admin/imconfiginternal/im_config.go
@@ -99,14 +99,24 @@ type SecurityPolicyReq struct {
}
type SecurityPolicyRes struct {
- TenantID int64 `json:"tenant_id"`
- TenantCode string `json:"tenant_code"`
- PolicyVersion uint `json:"policy_version"`
- GlobalFriendEnabled bool `json:"global_friend_enabled"`
- FriendDisabledPolicy map[string]interface{} `json:"friend_disabled_policy"`
- MessageCurfewEnabled bool `json:"message_curfew_enabled"`
+ TenantID int64 `json:"tenant_id"`
+ TenantCode string `json:"tenant_code"`
+ PolicyVersion uint `json:"policy_version"`
+ GlobalFriendEnabled bool `json:"global_friend_enabled"`
+ FriendDisabledPolicy map[string]interface{} `json:"friend_disabled_policy"`
+ MessageCurfewEnabled bool `json:"message_curfew_enabled"`
LoginRateLimit *SecurityLoginRateLimitRes `json:"login_rate_limit"`
- CurfewRules []*SecurityCurfewRuleRes `json:"curfew_rules"`
+ CurfewRules []*SecurityCurfewRuleRes `json:"curfew_rules"`
+}
+
+type RealnamePolicyReq struct {
+ g.Meta `path:"/internal/im-config/tenants/by-id/{id}/realname-policy" method:"get" tags:"IM内部配置" summary:"获取租户实名认证策略"`
+ Id int64 `json:"id" in:"path" dc:"租户ID"`
+}
+
+type RealnamePolicyRes struct {
+ TenantID int64 `json:"tenant_id"`
+ RealnameReviewPolicy int `json:"realname_review_policy"`
}
type SecurityLoginRateLimitRes struct {
diff --git a/server/internal/controller/internalapi/imconfig/im_config.go b/server/internal/controller/internalapi/imconfig/im_config.go
index c6e0618..d218fa9 100644
--- a/server/internal/controller/internalapi/imconfig/im_config.go
+++ b/server/internal/controller/internalapi/imconfig/im_config.go
@@ -302,6 +302,29 @@ func (c *cConfig) SecurityPolicy(ctx context.Context, req *api.SecurityPolicyReq
return res, nil
}
+func (c *cConfig) RealnamePolicy(ctx context.Context, req *api.RealnamePolicyReq) (res *api.RealnamePolicyRes, err error) {
+ tenant, err := getTenant(ctx, dao.ImTenant.Columns().Id, req.Id)
+ if err != nil {
+ return nil, err
+ }
+ res = defaultRealnamePolicy(tenant.Id)
+ var row *struct {
+ RealnameReviewPolicy int `json:"realname_review_policy"`
+ }
+ if err = imtenant.RegistryDB().Model(dao.ImTenantConfig.Table()).Safe().Ctx(ctx).
+ Fields("realname_review_policy").
+ Where(dao.ImTenantConfig.Columns().TenantId, tenant.Id).Scan(&row); err != nil {
+ return nil, gerror.Wrap(err, "获取租户实名认证策略失败")
+ }
+ if row == nil {
+ return res, nil
+ }
+ if row.RealnameReviewPolicy == 1 {
+ res.RealnameReviewPolicy = 1
+ }
+ return res, nil
+}
+
func parseStringArray(raw string) []string {
values := []string{}
if strings.TrimSpace(raw) == "" {
@@ -366,6 +389,13 @@ func defaultModerationPolicy(tenant *entity.ImTenant) *api.ModerationPolicyRes {
BlockMessage: "内容不符合平台规范,请修改后重试"}
}
+func defaultRealnamePolicy(tenantID int64) *api.RealnamePolicyRes {
+ return &api.RealnamePolicyRes{
+ TenantID: tenantID,
+ RealnameReviewPolicy: 0,
+ }
+}
+
func cloneBoolMap(src map[string]bool) map[string]bool {
dst := make(map[string]bool, len(src))
for k, v := range src {
diff --git a/server/internal/logic/sys/im_tenant.go b/server/internal/logic/sys/im_tenant.go
index f43db62..aa3bc19 100644
--- a/server/internal/logic/sys/im_tenant.go
+++ b/server/internal/logic/sys/im_tenant.go
@@ -28,16 +28,18 @@ type sSysImTenant struct{}
const (
tenantConfigAliyunModerationEnabled = "aliyun_moderation_enabled"
tenantConfigLocalModerationEnabled = "local_moderation_enabled"
+ tenantConfigRealnameReviewPolicy = "realname_review_policy"
)
type imTenantConfigModeration struct {
- Id int64 `json:"id"`
- TenantId int64 `json:"tenant_id"`
- MaxUsers uint64 `json:"max_users"`
- MaxGroups uint64 `json:"max_groups"`
- MaxGroupMembers uint `json:"max_group_members"`
- AliyunModerationEnabled int `json:"aliyun_moderation_enabled"`
- LocalModerationEnabled int `json:"local_moderation_enabled"`
+ Id int64 `json:"id" orm:"id"`
+ TenantId int64 `json:"tenant_id" orm:"tenant_id"`
+ MaxUsers uint64 `json:"max_users" orm:"max_users"`
+ MaxGroups uint64 `json:"max_groups" orm:"max_groups"`
+ MaxGroupMembers uint `json:"max_group_members" orm:"max_group_members"`
+ AliyunModerationEnabled int `json:"aliyun_moderation_enabled" orm:"aliyun_moderation_enabled"`
+ LocalModerationEnabled int `json:"local_moderation_enabled" orm:"local_moderation_enabled"`
+ RealnameReviewPolicy int `json:"realname_review_policy" orm:"realname_review_policy"`
}
func NewSysImTenant() *sSysImTenant {
@@ -157,6 +159,7 @@ func (s *sSysImTenant) fillListConfig(ctx context.Context, list []*sysin.ImTenan
item.MaxGroupMembers = conf.MaxGroupMembers
item.AliyunModerationEnabled = conf.AliyunModerationEnabled
item.LocalModerationEnabled = conf.LocalModerationEnabled
+ item.RealnameReviewPolicy = conf.RealnameReviewPolicy
}
item.DbDsnConfigured = dsnMap[item.Id] != ""
}
@@ -210,7 +213,7 @@ func (s *sSysImTenant) saveTenant(ctx context.Context, in *sysin.ImTenantEditInp
WherePri(in.Id).Data(in).Update(); err != nil {
return gerror.Wrap(err, "修改IM租户失败,请稍后重试!")
}
- return s.saveConfig(ctx, in.Id, in.MaxUsers, in.MaxGroups, in.MaxGroupMembers, in.AliyunModerationEnabled, in.LocalModerationEnabled, userId)
+ return s.saveConfig(ctx, in, userId)
}
in.CreatedBy = userId
@@ -222,7 +225,8 @@ func (s *sSysImTenant) saveTenant(ctx context.Context, in *sysin.ImTenantEditInp
return gerror.Wrap(err, "新增IM租户失败,请稍后重试!")
}
tenantID = id
- return s.saveConfig(ctx, id, in.MaxUsers, in.MaxGroups, in.MaxGroupMembers, in.AliyunModerationEnabled, in.LocalModerationEnabled, userId)
+ in.Id = id
+ return s.saveConfig(ctx, in, userId)
})
if err != nil {
return err
@@ -246,20 +250,21 @@ func (s *sSysImTenant) checkCodeUnique(ctx context.Context, id int64, code strin
return
}
-func (s *sSysImTenant) saveConfig(ctx context.Context, tenantId int64, maxUsers uint64, maxGroups uint64, maxGroupMembers uint, aliyunModerationEnabled, localModerationEnabled int, userId int64) (err error) {
+func (s *sSysImTenant) saveConfig(ctx context.Context, in *sysin.ImTenantEditInp, userId int64) (err error) {
var conf *entity.ImTenantConfig
if err = s.configModel(ctx).
- Where(dao.ImTenantConfig.Columns().TenantId, tenantId).
+ Where(dao.ImTenantConfig.Columns().TenantId, in.Id).
Scan(&conf); err != nil {
return gerror.Wrap(err, "获取IM租户配置失败,请稍后重试!")
}
data := g.Map{
- dao.ImTenantConfig.Columns().MaxUsers: maxUsers,
- dao.ImTenantConfig.Columns().MaxGroups: maxGroups,
- dao.ImTenantConfig.Columns().MaxGroupMembers: maxGroupMembers,
- tenantConfigAliyunModerationEnabled: aliyunModerationEnabled,
- tenantConfigLocalModerationEnabled: localModerationEnabled,
+ dao.ImTenantConfig.Columns().MaxUsers: in.MaxUsers,
+ dao.ImTenantConfig.Columns().MaxGroups: in.MaxGroups,
+ dao.ImTenantConfig.Columns().MaxGroupMembers: in.MaxGroupMembers,
+ tenantConfigAliyunModerationEnabled: in.AliyunModerationEnabled,
+ tenantConfigLocalModerationEnabled: in.LocalModerationEnabled,
+ tenantConfigRealnameReviewPolicy: in.RealnameReviewPolicy,
}
if conf != nil && conf.Id > 0 {
data[dao.ImTenantConfig.Columns().UpdatedBy] = userId
@@ -270,6 +275,7 @@ func (s *sSysImTenant) saveConfig(ctx context.Context, tenantId int64, maxUsers
dao.ImTenantConfig.Columns().MaxGroupMembers,
tenantConfigAliyunModerationEnabled,
tenantConfigLocalModerationEnabled,
+ tenantConfigRealnameReviewPolicy,
dao.ImTenantConfig.Columns().UpdatedBy,
).
WherePri(conf.Id).Data(data).Update(); err != nil {
@@ -278,7 +284,7 @@ func (s *sSysImTenant) saveConfig(ctx context.Context, tenantId int64, maxUsers
return
}
- data[dao.ImTenantConfig.Columns().TenantId] = tenantId
+ data[dao.ImTenantConfig.Columns().TenantId] = in.Id
data[dao.ImTenantConfig.Columns().CreatedBy] = userId
data[dao.ImTenantConfig.Columns().UpdatedBy] = userId
if _, err = s.configModel(ctx).
@@ -289,6 +295,7 @@ func (s *sSysImTenant) saveConfig(ctx context.Context, tenantId int64, maxUsers
dao.ImTenantConfig.Columns().MaxGroupMembers,
tenantConfigAliyunModerationEnabled,
tenantConfigLocalModerationEnabled,
+ tenantConfigRealnameReviewPolicy,
dao.ImTenantConfig.Columns().CreatedBy,
dao.ImTenantConfig.Columns().UpdatedBy,
).
@@ -324,6 +331,7 @@ func (s *sSysImTenant) View(ctx context.Context, in *sysin.ImTenantViewInp) (res
res.MaxGroupMembers = conf.MaxGroupMembers
res.AliyunModerationEnabled = conf.AliyunModerationEnabled
res.LocalModerationEnabled = conf.LocalModerationEnabled
+ res.RealnameReviewPolicy = conf.RealnameReviewPolicy
}
res.DbDsnConfigured = res.DbDsn != ""
return
diff --git a/server/internal/model/input/sysin/im_tenant.go b/server/internal/model/input/sysin/im_tenant.go
index 274be13..69a350c 100644
--- a/server/internal/model/input/sysin/im_tenant.go
+++ b/server/internal/model/input/sysin/im_tenant.go
@@ -48,6 +48,7 @@ type ImTenantConfigUpdateFields struct {
MaxGroupMembers uint `json:"maxGroupMembers" dc:"最大群成员数"`
AliyunModerationEnabled int `json:"aliyunModerationEnabled" dc:"是否启用阿里云内容审核"`
LocalModerationEnabled int `json:"localModerationEnabled" dc:"是否启用本地内容审核"`
+ RealnameReviewPolicy int `json:"realnameReviewPolicy" dc:"实名审核策略"`
UpdatedBy int64 `json:"updatedBy" dc:"更新者"`
}
@@ -59,6 +60,7 @@ type ImTenantConfigInsertFields struct {
MaxGroupMembers uint `json:"maxGroupMembers" dc:"最大群成员数"`
AliyunModerationEnabled int `json:"aliyunModerationEnabled" dc:"是否启用阿里云内容审核"`
LocalModerationEnabled int `json:"localModerationEnabled" dc:"是否启用本地内容审核"`
+ RealnameReviewPolicy int `json:"realnameReviewPolicy" dc:"实名审核策略"`
CreatedBy int64 `json:"createdBy" dc:"创建者"`
}
@@ -70,6 +72,7 @@ type ImTenantEditInp struct {
MaxGroupMembers uint `json:"maxGroupMembers" dc:"最大群成员数"`
AliyunModerationEnabled int `json:"aliyunModerationEnabled" dc:"是否启用阿里云内容审核"`
LocalModerationEnabled int `json:"localModerationEnabled" dc:"是否启用本地内容审核"`
+ RealnameReviewPolicy int `json:"realnameReviewPolicy" dc:"实名审核策略"`
}
func (in *ImTenantEditInp) Filter(ctx context.Context) (err error) {
@@ -89,6 +92,9 @@ func (in *ImTenantEditInp) Filter(ctx context.Context) (err error) {
(in.LocalModerationEnabled != 0 && in.LocalModerationEnabled != 1) {
return gerror.New("内容审核开关值不正确")
}
+ if in.RealnameReviewPolicy != 0 && in.RealnameReviewPolicy != 1 {
+ return gerror.New("实名审核策略不正确")
+ }
return
}
@@ -110,6 +116,7 @@ type ImTenantViewModel struct {
MaxGroupMembers uint `json:"maxGroupMembers" dc:"最大群成员数"`
AliyunModerationEnabled int `json:"aliyunModerationEnabled" dc:"是否启用阿里云内容审核"`
LocalModerationEnabled int `json:"localModerationEnabled" dc:"是否启用本地内容审核"`
+ RealnameReviewPolicy int `json:"realnameReviewPolicy" dc:"实名审核策略"`
CreatedBySumma *hook.MemberSumma `json:"createdBySumma" dc:"创建者摘要信息"`
UpdatedBySumma *hook.MemberSumma `json:"updatedBySumma" dc:"更新者摘要信息"`
DbDsnConfigured bool `json:"dbDsnConfigured" dc:"是否配置独立连接串"`
@@ -144,6 +151,7 @@ type ImTenantListModel struct {
MaxGroupMembers uint `json:"maxGroupMembers" dc:"最大群成员数"`
AliyunModerationEnabled int `json:"aliyunModerationEnabled" dc:"是否启用阿里云内容审核"`
LocalModerationEnabled int `json:"localModerationEnabled" dc:"是否启用本地内容审核"`
+ RealnameReviewPolicy int `json:"realnameReviewPolicy" dc:"实名审核策略"`
DbDsnConfigured bool `json:"dbDsnConfigured" dc:"是否配置独立连接串"`
CreatedBy int64 `json:"createdBy" dc:"创建者"`
CreatedBySumma *hook.MemberSumma `json:"createdBySumma" dc:"创建者摘要信息"`
diff --git a/web/src/views/imTenant/edit.vue b/web/src/views/imTenant/edit.vue
index d83018f..280502e 100644
--- a/web/src/views/imTenant/edit.vue
+++ b/web/src/views/imTenant/edit.vue
@@ -100,6 +100,15 @@
/>
+
+
+
+
+
(row.realnameReviewPolicy === 1 ? '自动审核' : '人工审核') }
+ );
+ },
+ },
{
title: '创建者',
key: 'createdBy',