feat(mail): 增强邮件限流与配额配置

- 新增 IMAP/POP3 事件表与清理任务,并接入 Dovecot auth policy。
- 暴露默认权限限额接口,前端权限组页面改为动态读取。
- 为 Dovecot 配置用户配额、连接数限制和 auth policy。
This commit is contained in:
LanQin_
2026-06-23 11:25:38 +08:00
parent 36b4c4c60f
commit 23b04bd343
9 changed files with 179 additions and 7 deletions
+14 -1
View File
@@ -215,6 +215,19 @@ func mergeLimitValue(left, right int) int {
return left
}
func minimalLimits() PermissionLimits {
// minimalLimits sets every field to 1 so that mergePermissionLimits
// (which takes the max of each field) produces correct aggregation
// when no group has a limit set for a given field.
return PermissionLimits{
MaxAttachmentMB: 1,
SMTPDailyLimit: 1,
SMTPMinuteLimit: 1,
IMAPMinuteLimit: 1,
POP3MinuteLimit: 1,
}
}
func actorCanGrantLimits(actor *User, limits PermissionLimits) bool {
if actor == nil {
return false
@@ -929,7 +942,7 @@ func (a *App) permissionsForGroupIDs(ctx context.Context, tx *sql.Tx, groupIDs [
}
func (a *App) limitsForGroupIDs(ctx context.Context, tx *sql.Tx, groupIDs []string) (PermissionLimits, error) {
limits := PermissionLimits{MaxAttachmentMB: 1, SMTPDailyLimit: 1, SMTPMinuteLimit: 1, IMAPMinuteLimit: 1, POP3MinuteLimit: 1}
limits := minimalLimits()
for _, groupID := range cleanIDList(groupIDs) {
if !isAssignablePermissionGroupID(groupID) {
return PermissionLimits{}, fmt.Errorf("permission group not assignable: %s", groupID)