Ensure public repositories in private organizations are visible and fix admin organizations list (#11465) (#11474)
* Ensure that we can see public repositories in private organization Fix #10144 (Again) Signed-off-by: Andrew Thornton <art27@cantab.net> * Fix Admin users and organizations page Signed-off-by: Andrew Thornton <art27@cantab.net> * Update models/repo_list.go Co-authored-by: Lauris BH <lauris@nix.lv> Co-authored-by: zeripath <art27@cantab.net> Co-authored-by: Lauris BH <lauris@nix.lv>
This commit is contained in:
parent
bbd9bebcc3
commit
087719cb8d
2 changed files with 27 additions and 5 deletions
|
@ -249,14 +249,35 @@ func SearchRepositoryCondition(opts *SearchRepoOptions) builder.Cond {
|
||||||
}
|
}
|
||||||
|
|
||||||
if opts.Collaborate != util.OptionalBoolFalse {
|
if opts.Collaborate != util.OptionalBoolFalse {
|
||||||
|
// A Collaboration is:
|
||||||
collaborateCond := builder.And(
|
collaborateCond := builder.And(
|
||||||
|
// 1. Repository we don't own
|
||||||
|
builder.Neq{"owner_id": opts.OwnerID},
|
||||||
|
// 2. But we can see because of:
|
||||||
builder.Or(
|
builder.Or(
|
||||||
builder.Expr("repository.id IN (SELECT repo_id FROM `access` WHERE access.user_id = ?)", opts.OwnerID),
|
// A. We have access
|
||||||
builder.In("id", builder.Select("`team_repo`.repo_id").
|
builder.In("`repository`.id",
|
||||||
|
builder.Select("`access`.repo_id").
|
||||||
|
From("access").
|
||||||
|
Where(builder.Eq{"`access`.user_id": opts.OwnerID})),
|
||||||
|
// B. We are in a team for
|
||||||
|
builder.In("`repository`.id", builder.Select("`team_repo`.repo_id").
|
||||||
From("team_repo").
|
From("team_repo").
|
||||||
Where(builder.Eq{"`team_user`.uid": opts.OwnerID}).
|
Where(builder.Eq{"`team_user`.uid": opts.OwnerID}).
|
||||||
Join("INNER", "team_user", "`team_user`.team_id = `team_repo`.team_id"))),
|
Join("INNER", "team_user", "`team_user`.team_id = `team_repo`.team_id")),
|
||||||
builder.Neq{"owner_id": opts.OwnerID})
|
// C. Public repositories in private organizations that we are member of
|
||||||
|
builder.And(
|
||||||
|
builder.Eq{"`repository`.is_private": false},
|
||||||
|
builder.In("`repository`.owner_id",
|
||||||
|
builder.Select("`org_user`.org_id").
|
||||||
|
From("org_user").
|
||||||
|
Join("INNER", "`user`", "`user`.id = `org_user`.org_id").
|
||||||
|
Where(builder.Eq{
|
||||||
|
"`org_user`.uid": opts.OwnerID,
|
||||||
|
"`user`.type": UserTypeOrganization,
|
||||||
|
"`user`.visibility": structs.VisibleTypePrivate,
|
||||||
|
})))),
|
||||||
|
)
|
||||||
if !opts.Private {
|
if !opts.Private {
|
||||||
collaborateCond = collaborateCond.And(builder.Expr("owner_id NOT IN (SELECT org_id FROM org_user WHERE org_user.uid = ? AND org_user.is_public = ?)", opts.OwnerID, false))
|
collaborateCond = collaborateCond.And(builder.Expr("owner_id NOT IN (SELECT org_id FROM org_user WHERE org_user.uid = ? AND org_user.is_public = ?)", opts.OwnerID, false))
|
||||||
}
|
}
|
||||||
|
|
|
@ -194,7 +194,6 @@ func RenderUserSearch(ctx *context.Context, opts *models.SearchUserOptions, tplN
|
||||||
if opts.Page <= 1 {
|
if opts.Page <= 1 {
|
||||||
opts.Page = 1
|
opts.Page = 1
|
||||||
}
|
}
|
||||||
opts.Actor = ctx.User
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
users []*models.User
|
users []*models.User
|
||||||
|
@ -252,6 +251,7 @@ func ExploreUsers(ctx *context.Context) {
|
||||||
ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
|
ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
|
||||||
|
|
||||||
RenderUserSearch(ctx, &models.SearchUserOptions{
|
RenderUserSearch(ctx, &models.SearchUserOptions{
|
||||||
|
Actor: ctx.User,
|
||||||
Type: models.UserTypeIndividual,
|
Type: models.UserTypeIndividual,
|
||||||
ListOptions: models.ListOptions{PageSize: setting.UI.ExplorePagingNum},
|
ListOptions: models.ListOptions{PageSize: setting.UI.ExplorePagingNum},
|
||||||
IsActive: util.OptionalBoolTrue,
|
IsActive: util.OptionalBoolTrue,
|
||||||
|
@ -272,6 +272,7 @@ func ExploreOrganizations(ctx *context.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderUserSearch(ctx, &models.SearchUserOptions{
|
RenderUserSearch(ctx, &models.SearchUserOptions{
|
||||||
|
Actor: ctx.User,
|
||||||
Type: models.UserTypeOrganization,
|
Type: models.UserTypeOrganization,
|
||||||
ListOptions: models.ListOptions{PageSize: setting.UI.ExplorePagingNum},
|
ListOptions: models.ListOptions{PageSize: setting.UI.ExplorePagingNum},
|
||||||
Visible: visibleTypes,
|
Visible: visibleTypes,
|
||||||
|
|
Reference in a new issue