diff options
author | Robert Speicher <robert@gitlab.com> | 2016-08-31 20:53:40 +0000 |
---|---|---|
committer | Robert Speicher <robert@gitlab.com> | 2016-08-31 20:53:40 +0000 |
commit | e71cd7a300017cf85e16de3b1c68fdb25c3a4b4d (patch) | |
tree | d38382dae7c95938510bae75080c3816df7544a0 /app/models/merge_request.rb | |
parent | 177cc4e4cbde21e8b56a9f3e0104d6319d79e6cc (diff) | |
parent | b105dc791df07bab0d5349c63cb73c7b3ee8212c (diff) | |
download | gitlab-ce-e71cd7a300017cf85e16de3b1c68fdb25c3a4b4d.tar.gz |
Merge branch 'refactor/add-policies' into 'master'
Refactor ability.rb into Policies
## What does this MR do?
Factors out `ability.rb` into a new abstraction - the "policy" (stored in `app/policies`). A policy is a class named `#{class_name}Policy` (looked up automatically as needed) that implements `rules` as follows:
``` ruby
class ThingPolicy < BasePolicy
def rules
@user # this is a user to determine abilities for, optionally nil in the anonymous case
@subject # this is the subject of the ability, guaranteed to be an instance of `Thing`
can! :some_ability # grant the :some_ability permission
cannot! :some_ability # ensure that :some_ability is not allowed. this overrides any `can!` that is called before or after
delegate! @subject.other_thing # merge the abilities (can!) and prohibitions (cannot!) from `@subject.other_thing`
can? :some_ability # test whether, so far, :some_ability is allowed
end
def anonymous_rules
# optional. if not implemented `rules` is called where `@user` is nil. otherwise this method is called when `@user` is nil.
end
end
```
See merge request !5796
Diffstat (limited to 'app/models/merge_request.rb')
-rw-r--r-- | app/models/merge_request.rb | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 3600fde866c..b0b1313f94a 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -411,7 +411,7 @@ class MergeRequest < ActiveRecord::Base def can_remove_source_branch?(current_user) !source_project.protected_branch?(source_branch) && !source_project.root_ref?(source_branch) && - Ability.abilities.allowed?(current_user, :push_code, source_project) && + Ability.allowed?(current_user, :push_code, source_project) && diff_head_commit == source_branch_head end |