Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
b3f0a82f
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b3f0a82f
编写于
7月 28, 2016
作者:
R
Rémy Coutable
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
New Members::ApproveAccessRequestService
Signed-off-by:
N
Rémy Coutable
<
remy@rymai.me
>
上级
8071dc83
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
120 addition
and
12 deletion
+120
-12
app/controllers/concerns/membership_actions.rb
app/controllers/concerns/membership_actions.rb
+1
-6
app/services/members/approve_access_request_service.rb
app/services/members/approve_access_request_service.rb
+30
-0
lib/api/access_requests.rb
lib/api/access_requests.rb
+1
-6
spec/services/members/approve_access_request_service_spec.rb
spec/services/members/approve_access_request_service_spec.rb
+88
-0
未找到文件。
app/controllers/concerns/membership_actions.rb
浏览文件 @
b3f0a82f
module
MembershipActions
extend
ActiveSupport
::
Concern
include
MembersHelper
def
request_access
membershipable
.
request_access
(
current_user
)
...
...
@@ -10,11 +9,7 @@ module MembershipActions
end
def
approve_access_request
@member
=
membershipable
.
requesters
.
find
(
params
[
:id
])
return
render_403
unless
can?
(
current_user
,
action_member_permission
(
:update
,
@member
),
@member
)
@member
.
accept_request
Members
::
ApproveAccessRequestService
.
new
(
membershipable
,
current_user
,
user_id:
params
[
:id
]).
execute
redirect_to
polymorphic_url
([
membershipable
,
:members
])
end
...
...
app/services/members/approve_access_request_service.rb
0 → 100644
浏览文件 @
b3f0a82f
module
Members
class
ApproveAccessRequestService
<
BaseService
include
MembersHelper
attr_accessor
:source
def
initialize
(
source
,
current_user
,
params
=
{})
@source
=
source
@current_user
=
current_user
@params
=
params
end
def
execute
access_requester
=
source
.
requesters
.
find_by!
(
user_id:
params
[
:user_id
])
raise
Gitlab
::
Access
::
AccessDeniedError
if
cannot_update_access_requester?
(
access_requester
)
access_requester
.
access_level
=
params
[
:access_level
]
if
params
[
:access_level
]
access_requester
.
accept_request
access_requester
end
private
def
cannot_update_access_requester?
(
access_requester
)
!
access_requester
||
!
can?
(
current_user
,
action_member_permission
(
:update
,
access_requester
),
access_requester
)
end
end
end
lib/api/access_requests.rb
浏览文件 @
b3f0a82f
...
...
@@ -55,13 +55,8 @@ module API
put
':id/access_requests/:user_id/approve'
do
required_attributes!
[
:user_id
]
source
=
find_source
(
source_type
,
params
[
:id
])
authorize_admin_source!
(
source_type
,
source
)
member
=
source
.
requesters
.
find_by!
(
user_id:
params
[
:user_id
])
if
params
[
:access_level
]
member
.
update
(
access_level:
params
[
:access_level
])
end
member
.
accept_request
member
=
::
Members
::
ApproveAccessRequestService
.
new
(
source
,
current_user
,
params
).
execute
status
:created
present
member
.
user
,
with:
Entities
::
Member
,
member:
member
...
...
spec/services/members/approve_access_request_service_spec.rb
0 → 100644
浏览文件 @
b3f0a82f
require
'spec_helper'
describe
Members
::
ApproveAccessRequestService
,
services:
true
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:access_requester
)
{
create
(
:user
)
}
let
(
:project
)
{
create
(
:project
,
:public
)
}
let
(
:group
)
{
create
(
:group
,
:public
)
}
shared_examples
'a service raising ActiveRecord::RecordNotFound'
do
it
'raises ActiveRecord::RecordNotFound'
do
expect
{
described_class
.
new
(
source
,
user
,
params
).
execute
}.
to
raise_error
(
ActiveRecord
::
RecordNotFound
)
end
end
shared_examples
'a service raising Gitlab::Access::AccessDeniedError'
do
it
'raises Gitlab::Access::AccessDeniedError'
do
expect
{
described_class
.
new
(
source
,
user
,
params
).
execute
}.
to
raise_error
(
Gitlab
::
Access
::
AccessDeniedError
)
end
end
shared_examples
'a service approving an access request'
do
it
'succeeds'
do
expect
{
described_class
.
new
(
source
,
user
,
params
).
execute
}.
to
change
{
source
.
requesters
.
count
}.
by
(
-
1
)
end
it
'returns a <Source>Member'
do
member
=
described_class
.
new
(
source
,
user
,
params
).
execute
expect
(
member
).
to
be_a
"
#{
source
.
class
.
to_s
}
Member"
.
constantize
expect
(
member
.
requested_at
).
to
be_nil
end
context
'with a custom access level'
do
let
(
:params
)
{
{
user_id:
access_requester
.
id
,
access_level:
Gitlab
::
Access
::
MASTER
}
}
it
'returns a ProjectMember with the custom access level'
do
member
=
described_class
.
new
(
source
,
user
,
params
).
execute
expect
(
member
.
access_level
).
to
eq
Gitlab
::
Access
::
MASTER
end
end
end
context
'when no access requester are found'
do
let
(
:params
)
{
{
user_id:
42
}
}
it_behaves_like
'a service raising ActiveRecord::RecordNotFound'
do
let
(
:source
)
{
project
}
end
it_behaves_like
'a service raising ActiveRecord::RecordNotFound'
do
let
(
:source
)
{
group
}
end
end
context
'when an access requester is found'
do
before
do
project
.
request_access
(
access_requester
)
group
.
request_access
(
access_requester
)
end
let
(
:params
)
{
{
user_id:
access_requester
.
id
}
}
context
'when current user cannot approve access request to the project'
do
it_behaves_like
'a service raising Gitlab::Access::AccessDeniedError'
do
let
(
:source
)
{
project
}
end
it_behaves_like
'a service raising Gitlab::Access::AccessDeniedError'
do
let
(
:source
)
{
group
}
end
end
context
'when current user can approve access request to the project'
do
before
do
project
.
team
<<
[
user
,
:master
]
group
.
add_owner
(
user
)
end
it_behaves_like
'a service approving an access request'
do
let
(
:source
)
{
project
}
end
it_behaves_like
'a service approving an access request'
do
let
(
:source
)
{
group
}
end
end
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录