Skip to content

Commit aeea48b

Browse files
committed
use Actor to calculate rightrs
1 parent f8fe663 commit aeea48b

File tree

5 files changed

+35
-20
lines changed

5 files changed

+35
-20
lines changed

models/org.go

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -427,20 +427,38 @@ func GetUserOrgsList(uid int64) ([]*MinimalOrg, error) {
427427
// FindOrgOptions finds orgs options
428428
type FindOrgOptions struct {
429429
ListOptions
430-
UserID int64
431-
IncludePrivate bool
430+
Actor *User
431+
UserID int64
432+
}
433+
434+
// queryOrgMembershipVisibleOrgIDs return query to only get org's of user who user is part of in public
435+
func queryOrgMembershipVisibleOrgIDs(actor *User) *builder.Builder {
436+
if actor == nil {
437+
return builder.Select("org_user.org_id").From("org_user").Where(builder.Eq{"org_user.is_public": true})
438+
}
439+
if actor.IsAdmin {
440+
return builder.Select("org_user.org_id").From("org_user")
441+
}
442+
return builder.Select("org_user.org_id").From("org_user").Where(builder.Eq{"org_user.is_public": true}).Or(builder.Eq{"org_user.uid": actor.ID})
432443
}
433444

434445
func (opts FindOrgOptions) toConds() builder.Cond {
435446
var cond = builder.NewCond()
447+
cond = cond.And(builder.In("`user`.`id`", queryOrgMembershipVisibleOrgIDs(opts.Actor)))
436448
if opts.UserID > 0 {
437-
// TODO: use queryUserOrgIDs()
438449
cond = cond.And(builder.In("`user`.`id`",
439450
builder.Select("org_user.org_id").
440451
From("org_user").
441452
Where(builder.Eq{"org_user.uid": opts.UserID})))
442453
}
443-
if !opts.IncludePrivate {
454+
if opts.Actor != nil {
455+
if !opts.Actor.IsAdmin {
456+
cond = cond.And(builder.In("`user`.visibility", structs.VisibleTypePublic, structs.VisibleTypeLimited)).Or(builder.In("`user`.`id`",
457+
builder.Select("org_user.org_id").
458+
From("org_user").
459+
Where(builder.Eq{"org_user.uid": opts.Actor.ID})))
460+
}
461+
} else {
444462
cond = cond.And(builder.Eq{"`user`.visibility": structs.VisibleTypePublic})
445463
}
446464
return cond

models/org_test.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -325,24 +325,23 @@ func TestFindOrgs(t *testing.T) {
325325
assert.NoError(t, PrepareTestDatabase())
326326

327327
orgs, err := FindOrgs(FindOrgOptions{
328-
UserID: 4,
329-
IncludePrivate: true,
328+
UserID: 4,
329+
Actor: &User{ID: 4},
330330
})
331331
assert.NoError(t, err)
332332
if assert.Len(t, orgs, 1) {
333333
assert.EqualValues(t, 3, orgs[0].ID)
334334
}
335335

336336
orgs, err = FindOrgs(FindOrgOptions{
337-
UserID: 4,
338-
IncludePrivate: false,
337+
UserID: 4,
339338
})
340339
assert.NoError(t, err)
341340
assert.EqualValues(t, 0, len(orgs))
342341

343342
total, err := CountOrgs(FindOrgOptions{
344-
UserID: 4,
345-
IncludePrivate: true,
343+
UserID: 4,
344+
Actor: &User{ID: 4},
346345
})
347346
assert.NoError(t, err)
348347
assert.EqualValues(t, 1, total)

routers/api/v1/org/org.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,11 @@ import (
2020

2121
func listUserOrgs(ctx *context.APIContext, u *models.User) {
2222
listOptions := utils.GetListOptions(ctx)
23-
showPrivate := ctx.IsSigned && (ctx.User.IsAdmin || ctx.User.ID == u.ID)
2423

2524
var opts = models.FindOrgOptions{
26-
ListOptions: listOptions,
27-
UserID: u.ID,
28-
IncludePrivate: showPrivate,
25+
Actor: ctx.User,
26+
ListOptions: listOptions,
27+
UserID: u.ID,
2928
}
3029
orgs, err := models.FindOrgs(opts)
3130
if err != nil {

routers/web/user/profile.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,9 @@ func Profile(ctx *context.Context) {
125125
ctx.Data["RenderedDescription"] = content
126126
}
127127

128-
showPrivate := ctx.IsSigned && (ctx.User.IsAdmin || ctx.User.ID == ctxUser.ID)
129-
130128
orgs, err := models.FindOrgs(models.FindOrgOptions{
131-
UserID: ctxUser.ID,
132-
IncludePrivate: showPrivate,
129+
Actor: ctx.User,
130+
UserID: ctxUser.ID,
133131
})
134132
if err != nil {
135133
ctx.ServerError("FindOrgs", err)
@@ -211,6 +209,7 @@ func Profile(ctx *context.Context) {
211209

212210
total = ctxUser.NumFollowing
213211
case "activity":
212+
showPrivate := ctx.IsSigned && (ctx.User.IsAdmin || ctx.User.ID == ctxUser.ID)
214213
retrieveFeeds(ctx, models.GetFeedsOptions{RequestedUser: ctxUser,
215214
Actor: ctx.User,
216215
IncludePrivate: showPrivate,

routers/web/user/setting/profile.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,8 @@ func Organization(ctx *context.Context) {
214214
PageSize: setting.UI.Admin.UserPagingNum,
215215
Page: ctx.QueryInt("page"),
216216
},
217-
UserID: ctx.User.ID,
218-
IncludePrivate: ctx.IsSigned,
217+
Actor: ctx.User,
218+
UserID: ctx.User.ID,
219219
}
220220

221221
if opts.Page <= 0 {

0 commit comments

Comments
 (0)