Fix private repo permission problem (#16142)
* Change user access permission * Add string 'transfer_notices_3' * Add 3rd transfer note to transfer dialog * Add test Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
parent
440039c0cc
commit
f374789fe2
4 changed files with 38 additions and 1 deletions
|
@ -1625,6 +1625,7 @@ settings.transfer_form_title = Enter the repository name as confirmation:
|
||||||
settings.transfer_in_progress = There is currently an ongoing transfer. Please cancel it if you will like to transfer this repository to another user.
|
settings.transfer_in_progress = There is currently an ongoing transfer. Please cancel it if you will like to transfer this repository to another user.
|
||||||
settings.transfer_notices_1 = - You will lose access to the repository if you transfer it to an individual user.
|
settings.transfer_notices_1 = - You will lose access to the repository if you transfer it to an individual user.
|
||||||
settings.transfer_notices_2 = - You will keep access to the repository if you transfer it to an organization that you (co-)own.
|
settings.transfer_notices_2 = - You will keep access to the repository if you transfer it to an organization that you (co-)own.
|
||||||
|
settings.transfer_notices_3 = - If the repository is private and is transferred to an individual user, this action makes sure that the user does have at least read permission (and changes permissions if necessary).
|
||||||
settings.transfer_owner = New Owner
|
settings.transfer_owner = New Owner
|
||||||
settings.transfer_perform = Perform Transfer
|
settings.transfer_perform = Perform Transfer
|
||||||
settings.transfer_started = This repository has been marked for transfer and awaits confirmation from "%s"
|
settings.transfer_started = This repository has been marked for transfer and awaits confirmation from "%s"
|
||||||
|
|
|
@ -94,6 +94,20 @@ func StartRepositoryTransfer(doer, newOwner *models.User, repo *models.Repositor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// In case the new owner would not have sufficient access to the repo, give access rights for read
|
||||||
|
hasAccess, err := models.HasAccess(newOwner.ID, repo)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if !hasAccess {
|
||||||
|
if err := repo.AddCollaborator(newOwner); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := repo.ChangeCollaborationAccessMode(newOwner.ID, models.AccessModeRead); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Make repo as pending for transfer
|
// Make repo as pending for transfer
|
||||||
repo.Status = models.RepositoryPendingTransfer
|
repo.Status = models.RepositoryPendingTransfer
|
||||||
if err := models.CreatePendingRepositoryTransfer(doer, newOwner, repo.ID, teams); err != nil {
|
if err := models.CreatePendingRepositoryTransfer(doer, newOwner, repo.ID, teams); err != nil {
|
||||||
|
|
|
@ -52,3 +52,24 @@ func TestTransferOwnership(t *testing.T) {
|
||||||
|
|
||||||
models.CheckConsistencyFor(t, &models.Repository{}, &models.User{}, &models.Team{})
|
models.CheckConsistencyFor(t, &models.Repository{}, &models.User{}, &models.Team{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestStartRepositoryTransferSetPermission(t *testing.T) {
|
||||||
|
assert.NoError(t, models.PrepareTestDatabase())
|
||||||
|
|
||||||
|
doer := models.AssertExistsAndLoadBean(t, &models.User{ID: 3}).(*models.User)
|
||||||
|
recipient := models.AssertExistsAndLoadBean(t, &models.User{ID: 5}).(*models.User)
|
||||||
|
repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 3}).(*models.Repository)
|
||||||
|
repo.Owner = models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User)
|
||||||
|
|
||||||
|
hasAccess, err := models.HasAccess(recipient.ID, repo)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.False(t, hasAccess)
|
||||||
|
|
||||||
|
assert.NoError(t, StartRepositoryTransfer(doer, recipient, repo, nil))
|
||||||
|
|
||||||
|
hasAccess, err = models.HasAccess(recipient.ID, repo)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, hasAccess)
|
||||||
|
|
||||||
|
models.CheckConsistencyFor(t, &models.Repository{}, &models.User{}, &models.Team{})
|
||||||
|
}
|
||||||
|
|
|
@ -733,7 +733,8 @@
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="ui warning message text left">
|
<div class="ui warning message text left">
|
||||||
{{.i18n.Tr "repo.settings.transfer_notices_1"}} <br>
|
{{.i18n.Tr "repo.settings.transfer_notices_1"}} <br>
|
||||||
{{.i18n.Tr "repo.settings.transfer_notices_2"}}
|
{{.i18n.Tr "repo.settings.transfer_notices_2"}} <br>
|
||||||
|
{{.i18n.Tr "repo.settings.transfer_notices_3"}}
|
||||||
</div>
|
</div>
|
||||||
<form class="ui form" action="{{.Link}}" method="post">
|
<form class="ui form" action="{{.Link}}" method="post">
|
||||||
{{.CsrfTokenHtml}}
|
{{.CsrfTokenHtml}}
|
||||||
|
|
Loading…
Reference in a new issue