Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
heptapod
heptapod
Commits
c959dd46493e
Commit
c959dd46
authored
Nov 21, 2016
by
Ahmad Sherif
Browse files
Update ProjectTeam#fetch_members to use project authorizations
parent
cb45c2bf0df6
Changes
5
Hide whitespace changes
Inline
Side-by-side
app/models/project.rb
View file @
c959dd46
...
...
@@ -127,6 +127,7 @@
has_many
:protected_branches
,
dependent: :destroy
has_many
:project_authorizations
,
dependent: :destroy
has_many
:authorized_users
,
through: :project_authorizations
,
source: :user
,
class_name:
'User'
has_many
:project_members
,
->
{
where
(
requested_at:
nil
)
},
dependent: :destroy
,
as: :source
alias_method
:members
,
:project_members
has_many
:users
,
through: :project_members
...
...
app/models/project_team.rb
View file @
c959dd46
...
...
@@ -80,7 +80,7 @@
alias_method
:users
,
:members
def
guests
@guests
||=
fetch_members
(
:guests
)
@guests
||=
fetch_members
(
Gitlab
::
Access
::
GUEST
)
end
def
reporters
...
...
@@ -84,7 +84,7 @@
end
def
reporters
@reporters
||=
fetch_members
(
:reporters
)
@reporters
||=
fetch_members
(
Gitlab
::
Access
::
REPORTER
)
end
def
developers
...
...
@@ -88,7 +88,7 @@
end
def
developers
@developers
||=
fetch_members
(
:developers
)
@developers
||=
fetch_members
(
Gitlab
::
Access
::
DEVELOPER
)
end
def
masters
...
...
@@ -92,7 +92,7 @@
end
def
masters
@masters
||=
fetch_members
(
:masters
)
@masters
||=
fetch_members
(
Gitlab
::
Access
::
MASTER
)
end
def
import
(
source_project
,
current_user
=
nil
)
...
...
@@ -185,11 +185,6 @@
private
def
fetch_members
(
level
=
nil
)
project_members
=
project
.
members
group_members
=
group
?
group
.
members
:
[]
if
level
project_members
=
project_members
.
public_send
(
level
)
group_members
=
group_members
.
public_send
(
level
)
if
group
end
members
=
project
.
authorized_users
members
=
members
.
where
(
project_authorizations:
{
access_level:
level
})
if
level
...
...
@@ -195,14 +190,7 @@
user_ids
=
project_members
.
pluck
(
:user_id
)
invited_members
=
fetch_invited_members
(
level
)
user_ids
.
push
(
*
invited_members
.
map
(
&
:user_id
))
if
invited_members
.
any?
user_ids
.
push
(
*
group_members
.
pluck
(
:user_id
))
if
group
User
.
where
(
id:
user_ids
)
members
end
def
group
project
.
group
end
...
...
@@ -204,40 +192,6 @@
end
def
group
project
.
group
end
def
project_shared_with_group?
project
.
invited_groups
.
any?
&&
project
.
allowed_to_share_with_group?
end
def
fetch_invited_members
(
level
=
nil
)
invited_members
=
[]
return
invited_members
unless
project_shared_with_group?
project
.
project_group_links
.
includes
(
group:
[
:group_members
]).
each
do
|
link
|
invited_group_members
=
link
.
group
.
members
if
level
numeric_level
=
GroupMember
.
access_level_roles
[
level
.
to_s
.
singularize
.
titleize
]
# If we're asked for a level that's higher than the group's access,
# there's nothing left to do
next
if
numeric_level
>
link
.
group_access
# Make sure we include everyone _above_ the requested level as well
invited_group_members
=
if
numeric_level
==
link
.
group_access
invited_group_members
.
where
(
"access_level >= ?"
,
link
.
group_access
)
else
invited_group_members
.
public_send
(
level
)
end
end
invited_members
<<
invited_group_members
end
invited_members
.
flatten
.
compact
end
end
changelogs/unreleased/fix-drop-project-authorized-for-user.yml
0 → 100644
View file @
c959dd46
---
title
:
Use authorized projects in ProjectTeam
merge_request
:
author
:
db/fixtures/development/06_teams.rb
View file @
c959dd46
Gitlab
::
Seeder
.
quiet
do
Group
.
all
.
each
do
|
group
|
User
.
all
.
sample
(
4
).
each
do
|
user
|
if
group
.
add_user
(
user
,
Gitlab
::
Access
.
values
.
sample
).
persisted?
print
'.'
else
print
'F'
require
'sidekiq/testing'
require
'./db/fixtures/support/serialized_transaction'
Sidekiq
::
Testing
.
inline!
do
Gitlab
::
Seeder
.
quiet
do
Group
.
all
.
each
do
|
group
|
User
.
all
.
sample
(
4
).
each
do
|
user
|
if
group
.
add_user
(
user
,
Gitlab
::
Access
.
values
.
sample
).
persisted?
print
'.'
else
print
'F'
end
end
end
...
...
@@ -8,4 +13,3 @@
end
end
end
...
...
@@ -11,10 +15,11 @@
Project
.
all
.
each
do
|
project
|
User
.
all
.
sample
(
4
).
each
do
|
user
|
if
project
.
team
<<
[
user
,
Gitlab
::
Access
.
values
.
sample
]
print
'.'
else
print
'F'
Project
.
all
.
each
do
|
project
|
User
.
all
.
sample
(
4
).
each
do
|
user
|
if
project
.
team
<<
[
user
,
Gitlab
::
Access
.
values
.
sample
]
print
'.'
else
print
'F'
end
end
end
end
...
...
spec/models/project_team_spec.rb
View file @
c959dd46
...
...
@@ -118,7 +118,7 @@
context
'group project'
do
let
(
:group
)
{
create
(
:group
)
}
let
(
:project
)
{
create
(
:empty_project
,
group:
group
)
}
let
!
(
:project
)
{
create
(
:empty_project
,
group:
group
)
}
it
'returns project members'
do
group_member
=
create
(
:group_member
,
group:
group
)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment