1
0
Fork 0
mirror of https://codeberg.org/forgejo/forgejo.git synced 2025-07-24 12:09:39 +02:00

[v11.0/forgejo] fix: show membership of limited orgs (#8095)

**Backport:** https://codeberg.org/forgejo/forgejo/pulls/8094

- Include organisations with visibility of limited if the visitor is signed in.
- Resolves forgejo/forgejo#8093
- Added unit test.

Co-authored-by: Gusted <postmaster@gusted.xyz>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8095
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: Otto <otto@codeberg.org>
Co-authored-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
Co-committed-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
This commit is contained in:
forgejo-backport-action 2025-06-07 01:59:55 +02:00 committed by Otto
parent d3c6ab538e
commit f067db8f8e
4 changed files with 29 additions and 3 deletions

View file

@ -0,0 +1,5 @@
-
id: 1000
uid: 4
org_id: 22
is_public: true

View file

@ -26,6 +26,7 @@ type SearchOrganizationsOptions struct {
type FindOrgOptions struct { type FindOrgOptions struct {
db.ListOptions db.ListOptions
UserID int64 UserID int64
IncludeLimited bool
IncludePrivate bool IncludePrivate bool
} }
@ -43,7 +44,11 @@ func (opts FindOrgOptions) ToConds() builder.Cond {
cond = cond.And(builder.In("`user`.`id`", queryUserOrgIDs(opts.UserID, opts.IncludePrivate))) cond = cond.And(builder.In("`user`.`id`", queryUserOrgIDs(opts.UserID, opts.IncludePrivate)))
} }
if !opts.IncludePrivate { if !opts.IncludePrivate {
cond = cond.And(builder.Eq{"`user`.visibility": structs.VisibleTypePublic}) if !opts.IncludeLimited {
cond = cond.And(builder.Eq{"`user`.visibility": structs.VisibleTypePublic})
} else {
cond = cond.And(builder.In("`user`.visibility", structs.VisibleTypePublic, structs.VisibleTypeLimited))
}
} }
return cond return cond
} }

View file

@ -27,6 +27,7 @@ func TestCountOrganizations(t *testing.T) {
} }
func TestFindOrgs(t *testing.T) { func TestFindOrgs(t *testing.T) {
defer unittest.OverrideFixtures("models/organization/TestFindOrgs")()
require.NoError(t, unittest.PrepareTestDatabase()) require.NoError(t, unittest.PrepareTestDatabase())
orgs, err := db.Find[organization.Organization](db.DefaultContext, organization.FindOrgOptions{ orgs, err := db.Find[organization.Organization](db.DefaultContext, organization.FindOrgOptions{
@ -34,8 +35,14 @@ func TestFindOrgs(t *testing.T) {
IncludePrivate: true, IncludePrivate: true,
}) })
require.NoError(t, err) require.NoError(t, err)
if assert.Len(t, orgs, 1) { if assert.Len(t, orgs, 2) {
assert.EqualValues(t, 3, orgs[0].ID) if orgs[0].ID == 22 {
assert.EqualValues(t, 22, orgs[0].ID)
assert.EqualValues(t, 3, orgs[1].ID)
} else {
assert.EqualValues(t, 3, orgs[0].ID)
assert.EqualValues(t, 22, orgs[1].ID)
}
} }
orgs, err = db.Find[organization.Organization](db.DefaultContext, organization.FindOrgOptions{ orgs, err = db.Find[organization.Organization](db.DefaultContext, organization.FindOrgOptions{
@ -50,6 +57,14 @@ func TestFindOrgs(t *testing.T) {
IncludePrivate: true, IncludePrivate: true,
}) })
require.NoError(t, err) require.NoError(t, err)
assert.EqualValues(t, 2, total)
total, err = db.Count[organization.Organization](db.DefaultContext, organization.FindOrgOptions{
UserID: 4,
IncludePrivate: false,
IncludeLimited: true,
})
require.NoError(t, err)
assert.EqualValues(t, 1, total) assert.EqualValues(t, 1, total)
} }

View file

@ -66,6 +66,7 @@ func PrepareContextForProfileBigAvatar(ctx *context.Context) {
showPrivate := ctx.IsSigned && (ctx.Doer.IsAdmin || ctx.Doer.ID == ctx.ContextUser.ID) showPrivate := ctx.IsSigned && (ctx.Doer.IsAdmin || ctx.Doer.ID == ctx.ContextUser.ID)
orgs, err := db.Find[organization.Organization](ctx, organization.FindOrgOptions{ orgs, err := db.Find[organization.Organization](ctx, organization.FindOrgOptions{
UserID: ctx.ContextUser.ID, UserID: ctx.ContextUser.ID,
IncludeLimited: ctx.IsSigned,
IncludePrivate: showPrivate, IncludePrivate: showPrivate,
}) })
if err != nil { if err != nil {