Add group announcement edit permissions

This commit is contained in:
richjohnrambo
2026-09-04 11:09:29 +08:00
parent 62af772260
commit a191ca0c93
3 changed files with 50 additions and 4 deletions
+16 -3
View File
@@ -5224,7 +5224,7 @@ func serveIMGroupAnnouncements(wrt http.ResponseWriter, req *http.Request, topic
logs.Warn.Println("im group announcement latest: returning empty after store error", principal.TenantID, topic, err)
ann = nil
}
writeIMSuccess(wrt, req, groupAnnouncementPayload(ann))
writeIMSuccess(wrt, req, groupAnnouncementPayloadWithPermissions(topic, ann, selfSub))
case tail == "announcements/current" && req.Method == http.MethodPut:
if !(selfSub.ModeGiven & selfSub.ModeWant).IsAdmin() {
writeIMError(wrt, req, http.StatusForbidden, 30005, imReasonPermissionDenied, "permission denied", nil)
@@ -5257,7 +5257,7 @@ func serveIMGroupAnnouncements(wrt http.ResponseWriter, req *http.Request, topic
return
}
dispatchIMGroupEvents(principal.TenantID)
writeIMSuccess(wrt, req, groupAnnouncementPayload(announcement))
writeIMSuccess(wrt, req, groupAnnouncementPayloadWithPermissions(topic, announcement, selfSub))
case strings.HasPrefix(tail, "announcements/") && strings.HasSuffix(tail, "/read") && req.Method == http.MethodPost:
announcementID := strings.TrimSuffix(strings.TrimPrefix(tail, "announcements/"), "/read")
now := time.Now().UTC().Round(time.Millisecond)
@@ -5272,7 +5272,7 @@ func serveIMGroupAnnouncements(wrt http.ResponseWriter, req *http.Request, topic
logs.Warn.Println("im group announcement get: returning empty after store error", principal.TenantID, topic, err)
ann = nil
}
writeIMSuccess(wrt, req, groupAnnouncementPayload(ann))
writeIMSuccess(wrt, req, groupAnnouncementPayloadWithPermissions(topic, ann, selfSub))
default:
writeIMError(wrt, req, http.StatusMethodNotAllowed, 30002, imReasonMethodNotAllowed, "method not allowed", nil)
}
@@ -7097,6 +7097,19 @@ func groupAnnouncementPayload(ann *types.GroupAnnouncement) map[string]any {
}
}
func groupAnnouncementPayloadWithPermissions(topic string, ann *types.GroupAnnouncement, selfSub *types.Subscription) map[string]any {
data := groupAnnouncementPayload(ann)
data["topic"] = topic
access := types.ModeNone
if selfSub != nil {
access = selfSub.ModeGiven & selfSub.ModeWant
}
data["permissions"] = map[string]any{
"can_edit": access.IsAdmin(),
}
return data
}
func groupMutePayload(mute types.GroupMute) map[string]any {
data := map[string]any{
"user_id": mute.UserID.UserId(),