gitlab-org--gitlab-foss/lib/api
Robert Speicher e71cd7a300 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
2016-08-31 20:53:40 +00:00
..
helpers
access_requests.rb
api.rb
api_guard.rb
award_emoji.rb
branches.rb
broadcast_messages.rb
builds.rb
commit_statuses.rb
commits.rb
deploy_keys.rb
deployments.rb
entities.rb
environments.rb
files.rb
groups.rb
helpers.rb
internal.rb
issues.rb
keys.rb
labels.rb
license_templates.rb
members.rb
merge_request_diffs.rb
merge_requests.rb
milestones.rb
namespaces.rb
notes.rb
pipelines.rb
project_hooks.rb
project_snippets.rb
projects.rb
repositories.rb
runners.rb
services.rb
session.rb
settings.rb
sidekiq_metrics.rb
subscriptions.rb
system_hooks.rb
tags.rb
templates.rb
todos.rb
triggers.rb
users.rb
variables.rb