Use CanCanCan for changesets controller
authorAndy Allan <git@gravitystorm.co.uk>
Wed, 9 Jan 2019 11:22:39 +0000 (12:22 +0100)
committerAndy Allan <git@gravitystorm.co.uk>
Wed, 9 Jan 2019 11:41:33 +0000 (12:41 +0100)
The expand_bbox method now needs require_write_api capability on tokens.

app/abilities/ability.rb
app/abilities/capability.rb
app/controllers/changesets_controller.rb

index 1fcf6cbeef9fc1b5dc657e43811d9044d1342be7..6dbeb0b64fe261e15ac6a82a8341049ebe80039d 100644 (file)
@@ -4,6 +4,7 @@ class Ability
   include CanCan::Ability
 
   def initialize(user)
+    can [:index, :feed, :read, :download, :query], Changeset
     can :index, ChangesetComment
     can [:index, :permalink, :edit, :help, :fixthemap, :offline, :export, :about, :preview, :copyright, :key, :id], :site
     can [:index, :rss, :show, :comments], DiaryEntry
@@ -22,7 +23,8 @@ class Ability
       can [:account, :go_public, :make_friend, :remove_friend, :api_details, :api_gpx_files], User
       can [:read, :read_one, :update, :update_one, :delete_one], UserPreference
 
-      if user.terms_agreed? || !REQUIRE_TERMS_AGREED # rubocop:disable Style/IfUnlessModifier
+      if user.terms_agreed? || !REQUIRE_TERMS_AGREED
+        can [:create, :update, :upload, :close, :subscribe, :unsubscribe, :expand_bbox], Changeset
         can :create, ChangesetComment
       end
 
index ae30a0ebd00d7e563665a8c900f7981088b10a9a..fdc53891ae1385e3531de14e509d3d295e7adcf7 100644 (file)
@@ -11,6 +11,7 @@ class Capability
     can [:update, :update_one, :delete_one], UserPreference if capability?(token, :allow_write_prefs)
 
     if token&.user&.terms_agreed? || !REQUIRE_TERMS_AGREED
+      can [:create, :update, :upload, :close, :subscribe, :unsubscribe, :expand_bbox], Changeset if capability?(token, :allow_write_api)
       can :create, ChangesetComment if capability?(token, :allow_write_api)
     end
 
index e4fd593d7d35d34015640d002ec8a59ae922e20c..97ff85f0259cc90f4a3b3dc7186e679f5f5fc5c5 100644 (file)
@@ -8,7 +8,10 @@ class ChangesetsController < ApplicationController
   before_action :authorize_web, :only => [:index, :feed]
   before_action :set_locale, :only => [:index, :feed]
   before_action :authorize, :only => [:create, :update, :upload, :close, :subscribe, :unsubscribe]
-  before_action :require_allow_write_api, :only => [:create, :update, :upload, :close, :subscribe, :unsubscribe]
+  before_action :api_deny_access_handler, :only => [:create, :update, :upload, :close, :subscribe, :unsubscribe, :expand_bbox]
+
+  authorize_resource
+
   before_action :require_public_data, :only => [:create, :update, :upload, :close, :subscribe, :unsubscribe]
   before_action :check_api_writable, :only => [:create, :update, :upload, :subscribe, :unsubscribe]
   before_action :check_api_readable, :except => [:create, :update, :upload, :download, :query, :index, :feed, :subscribe, :unsubscribe]