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
1311518a1582
Commit
846e5817
authored
Feb 28, 2017
by
http://jneen.net/
Browse files
use a magic default :global symbol instead of nil
to make sure we mean the global permissions
parent
509064b54556
Changes
10
Hide whitespace changes
Inline
Side-by-side
app/controllers/application_controller.rb
View file @
1311518a
...
...
@@ -90,7 +90,7 @@ def after_sign_out_path_for(resource)
current_application_settings
.
after_sign_out_path
.
presence
||
new_user_session_path
end
def
can?
(
object
,
action
,
subject
)
def
can?
(
object
,
action
,
subject
=
:global
)
Ability
.
allowed?
(
object
,
action
,
subject
)
end
...
...
app/controllers/groups_controller.rb
View file @
1311518a
...
...
@@ -118,7 +118,7 @@ def setup_projects
end
def
authorize_create_group!
unless
can?
(
current_user
,
:create_group
,
nil
)
unless
can?
(
current_user
,
:create_group
)
return
render_404
end
end
...
...
app/models/ability.rb
View file @
1311518a
...
...
@@ -56,15 +56,16 @@ def can_edit_note?(user, note)
end
end
def
allowed?
(
user
,
action
,
subject
)
def
allowed?
(
user
,
action
,
subject
=
:global
)
allowed
(
user
,
subject
).
include?
(
action
)
end
def
allowed
(
user
,
subject
)
def
allowed
(
user
,
subject
=
:global
)
return
BasePolicy
::
RuleSet
.
none
if
subject
.
nil?
return
uncached_allowed
(
user
,
subject
)
unless
RequestStore
.
active?
user_key
=
user
?
user
.
id
:
'anonymous'
subject_key
=
subject
?
"
#{
subject
.
class
.
name
}
/
#{
subject
.
id
}
"
:
'global'
subject_key
=
subject
==
:global
?
'global'
:
"
#{
subject
.
class
.
name
}
/
#{
subject
.
id
}
"
key
=
"/ability/
#{
user_key
}
/
#{
subject_key
}
"
RequestStore
[
key
]
||=
uncached_allowed
(
user
,
subject
).
freeze
end
...
...
app/models/guest.rb
View file @
1311518a
class
Guest
class
<<
self
def
can?
(
action
,
subject
)
def
can?
(
action
,
subject
=
:global
)
Ability
.
allowed?
(
nil
,
action
,
subject
)
end
end
...
...
app/models/user.rb
View file @
1311518a
...
...
@@ -563,14 +563,14 @@ def can_create_project?
end
def
can_create_group?
can?
(
:create_group
,
nil
)
can?
(
:create_group
)
end
def
can_select_namespace?
several_namespaces?
||
admin
end
def
can?
(
action
,
subject
)
def
can?
(
action
,
subject
=
:global
)
Ability
.
allowed?
(
self
,
action
,
subject
)
end
...
...
app/policies/base_policy.rb
View file @
1311518a
...
...
@@ -12,6 +12,10 @@ def self.empty
new
(
Set
.
new
,
Set
.
new
)
end
def
self
.
none
empty
.
freeze
end
def
can?
(
ability
)
@can_set
.
include?
(
ability
)
&&
!
@cannot_set
.
include?
(
ability
)
end
...
...
@@ -49,7 +53,8 @@ def self.abilities(user, subject)
end
def
self
.
class_for
(
subject
)
return
GlobalPolicy
if
subject
.
nil?
return
GlobalPolicy
if
subject
==
:global
raise
ArgumentError
,
'no policy for nil'
if
subject
.
nil?
if
subject
.
class
.
try
(
:presenter?
)
subject
=
subject
.
subject
...
...
@@ -79,7 +84,7 @@ def initialize(user, subject)
end
def
abilities
return
RuleSet
.
empty
if
@user
&&
@user
.
blocked?
return
RuleSet
.
none
if
@user
&&
@user
.
blocked?
return
anonymous_abilities
if
@user
.
nil?
collect_rules
{
rules
}
end
...
...
lib/api/helpers.rb
View file @
1311518a
...
...
@@ -116,7 +116,7 @@ def authenticated_as_admin!
forbidden!
unless
current_user
.
is_admin?
end
def
authorize!
(
action
,
subject
=
ni
l
)
def
authorize!
(
action
,
subject
=
:globa
l
)
forbidden!
unless
can?
(
current_user
,
action
,
subject
)
end
...
...
@@ -134,7 +134,7 @@ def require_gitlab_workhorse!
end
end
def
can?
(
object
,
action
,
subject
)
def
can?
(
object
,
action
,
subject
=
:global
)
Ability
.
allowed?
(
object
,
action
,
subject
)
end
...
...
lib/api/users.rb
View file @
1311518a
...
...
@@ -45,7 +45,7 @@ def find_user(params)
use
:pagination
end
get
do
unless
can?
(
current_user
,
:read_users_list
,
nil
)
unless
can?
(
current_user
,
:read_users_list
)
render_api_error!
(
"Not authorized."
,
403
)
end
...
...
lib/banzai/reference_parser/base_parser.rb
View file @
1311518a
...
...
@@ -210,7 +210,7 @@ def projects_for_nodes(nodes)
grouped_objects_for_nodes
(
nodes
,
Project
,
'data-project'
)
end
def
can?
(
user
,
permission
,
subject
)
def
can?
(
user
,
permission
,
subject
=
:global
)
Ability
.
allowed?
(
user
,
permission
,
subject
)
end
...
...
lib/gitlab/allowable.rb
View file @
1311518a
module
Gitlab
module
Allowable
def
can?
(
user
,
action
,
subject
)
def
can?
(
user
,
action
,
subject
=
:global
)
Ability
.
allowed?
(
user
,
action
,
subject
)
end
end
...
...
Write
Preview
Markdown
is supported
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