fix: align group private chat permission semantics

This commit is contained in:
richjohnrambo
2026-09-30 16:11:30 +08:00
parent 99ae6328ff
commit 05b3da55ac
6 changed files with 79 additions and 20 deletions
+33
View File
@@ -394,6 +394,39 @@ func (a *adapter) TenantGroupMemberList(id t.TenantID, topic string, opts t.Grou
return items, next, rows.Err()
}
func (a *adapter) TenantUsersShareOpenPrivateGroup(id t.TenantID, userID, peerID t.Uid) (bool, error) {
if tenantAdp, err := a.routeGroupTenant(id); err != nil {
return false, err
} else if tenantAdp != a {
return tenantAdp.TenantUsersShareOpenPrivateGroup(id, userID, peerID)
}
if userID.IsZero() || peerID.IsZero() || userID == peerID {
return false, t.ErrMalformed
}
ctx, cancel := a.getContext()
if cancel != nil {
defer cancel()
}
var exists int
err := a.db.GetContext(ctx, &exists, tenantShardSQL(id, `
SELECT 1
FROM im_group_members AS gm1
INNER JOIN im_group_members AS gm2
ON gm2.tenant_id=gm1.tenant_id AND gm2.topic=gm1.topic
INNER JOIN im_group_settings AS gs
ON gs.tenant_id=gm1.tenant_id AND gs.topic=gm1.topic
WHERE gm1.tenant_id=? AND gm1.user_id=? AND gm1.member_status=?
AND gm2.user_id=? AND gm2.member_status=?
AND gs.group_status=? AND gs.member_private_chat=1
LIMIT 1`),
id, decodeUID(userID), t.GroupMemberStatusActive,
decodeUID(peerID), t.GroupMemberStatusActive, t.GroupStatusActive)
if err == sql.ErrNoRows {
return false, nil
}
return exists == 1, err
}
func (a *adapter) TenantGroupMemberUpdate(id t.TenantID, topic string, uid t.Uid, patch t.GroupMemberPatch) (*t.GroupMember, error) {
if tenantAdp, err := a.routeGroupTenant(id); err != nil {
return nil, err