Don't allow any abilities for inactive users

This commit is contained in:
Tom Hughes 2022-12-23 16:25:03 +00:00
parent 445e8162e9
commit 9cb7a7b36b
5 changed files with 37 additions and 43 deletions

View file

@ -65,7 +65,7 @@ Metrics/ClassLength:
# Offense count: 58 # Offense count: 58
# Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods. # Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods.
Metrics/CyclomaticComplexity: Metrics/CyclomaticComplexity:
Max: 25 Max: 26
# Offense count: 751 # Offense count: 751
# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, AllowedMethods, AllowedPatterns, IgnoredMethods. # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, AllowedMethods, AllowedPatterns, IgnoredMethods.
@ -80,7 +80,7 @@ Metrics/ParameterLists:
# Offense count: 57 # Offense count: 57
# Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods. # Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods.
Metrics/PerceivedComplexity: Metrics/PerceivedComplexity:
Max: 26 Max: 27
# Offense count: 2495 # Offense count: 2495
# This cop supports safe autocorrection (--autocorrect). # This cop supports safe autocorrection (--autocorrect).

View file

@ -33,7 +33,7 @@ class Ability
can [:history, :version], OldRelation can [:history, :version], OldRelation
end end
if user if user&.active?
can :welcome, :site can :welcome, :site
can [:revoke, :authorize], :oauth can [:revoke, :authorize], :oauth
can [:show], :deletion can [:show], :deletion

View file

@ -23,7 +23,7 @@ class ApiAbility
can [:history, :version], OldRelation can [:history, :version], OldRelation
end end
if user if user&.active?
can :welcome, :site can :welcome, :site
can [:revoke, :authorize], :oauth can [:revoke, :authorize], :oauth

View file

@ -11,29 +11,31 @@ class ApiCapability
token.user token.user
end end
can [:create, :comment, :close, :reopen], Note if scope?(token, :write_notes) if user&.active?
can [:show, :data], Trace if scope?(token, :read_gpx) can [:create, :comment, :close, :reopen], Note if scope?(token, :write_notes)
can [:create, :update, :destroy], Trace if scope?(token, :write_gpx) can [:show, :data], Trace if scope?(token, :read_gpx)
can [:details], User if scope?(token, :read_prefs) can [:create, :update, :destroy], Trace if scope?(token, :write_gpx)
can [:gpx_files], User if scope?(token, :read_gpx) can [:details], User if scope?(token, :read_prefs)
can [:index, :show], UserPreference if scope?(token, :read_prefs) can [:gpx_files], User if scope?(token, :read_gpx)
can [:update, :update_all, :destroy], UserPreference if scope?(token, :write_prefs) can [:index, :show], UserPreference if scope?(token, :read_prefs)
can [:update, :update_all, :destroy], UserPreference if scope?(token, :write_prefs)
if user&.terms_agreed? if user.terms_agreed?
can [:create, :update, :upload, :close, :subscribe, :unsubscribe], Changeset if scope?(token, :write_api) can [:create, :update, :upload, :close, :subscribe, :unsubscribe], Changeset if scope?(token, :write_api)
can :create, ChangesetComment if scope?(token, :write_api) can :create, ChangesetComment if scope?(token, :write_api)
can [:create, :update, :delete], Node if scope?(token, :write_api) can [:create, :update, :delete], Node if scope?(token, :write_api)
can [:create, :update, :delete], Way if scope?(token, :write_api) can [:create, :update, :delete], Way if scope?(token, :write_api)
can [:create, :update, :delete], Relation if scope?(token, :write_api) can [:create, :update, :delete], Relation if scope?(token, :write_api)
end end
if user&.moderator? if user.moderator?
can [:destroy, :restore], ChangesetComment if scope?(token, :write_api) can [:destroy, :restore], ChangesetComment if scope?(token, :write_api)
can :destroy, Note if scope?(token, :write_notes) can :destroy, Note if scope?(token, :write_notes)
if user&.terms_agreed? if user&.terms_agreed?
can :redact, OldNode if scope?(token, :write_api) can :redact, OldNode if scope?(token, :write_api)
can :redact, OldWay if scope?(token, :write_api) can :redact, OldWay if scope?(token, :write_api)
can :redact, OldRelation if scope?(token, :write_api) can :redact, OldRelation if scope?(token, :write_api)
end
end end
end end
end end

View file

@ -2,19 +2,7 @@
require "test_helper" require "test_helper"
class ApiCapabilityTest < ActiveSupport::TestCase class ChangesetCommentApiCapabilityTest < ActiveSupport::TestCase
private
def tokens(*toks)
AccessToken.new do |token|
toks.each do |t|
token.public_send("#{t}=", true)
end
end
end
end
class ChangesetCommentApiCapabilityTest < ApiCapabilityTest
test "as a normal user with permissionless token" do test "as a normal user with permissionless token" do
token = create(:access_token) token = create(:access_token)
capability = ApiCapability.new token capability = ApiCapability.new token
@ -56,7 +44,7 @@ class ChangesetCommentApiCapabilityTest < ApiCapabilityTest
end end
end end
class NoteApiCapabilityTest < ApiCapabilityTest class NoteApiCapabilityTest < ActiveSupport::TestCase
test "as a normal user with permissionless token" do test "as a normal user with permissionless token" do
token = create(:access_token) token = create(:access_token)
capability = ApiCapability.new token capability = ApiCapability.new token
@ -98,7 +86,7 @@ class NoteApiCapabilityTest < ApiCapabilityTest
end end
end end
class UserApiCapabilityTest < ApiCapabilityTest class UserApiCapabilityTest < ActiveSupport::TestCase
test "user preferences" do test "user preferences" do
# a user with no tokens # a user with no tokens
capability = ApiCapability.new nil capability = ApiCapability.new nil
@ -107,13 +95,15 @@ class UserApiCapabilityTest < ApiCapabilityTest
end end
# A user with empty tokens # A user with empty tokens
capability = ApiCapability.new tokens token = create(:access_token)
capability = ApiCapability.new token
[:index, :show, :update_all, :update, :destroy].each do |act| [:index, :show, :update_all, :update, :destroy].each do |act|
assert capability.cannot? act, UserPreference assert capability.cannot? act, UserPreference
end end
capability = ApiCapability.new tokens(:allow_read_prefs) token = create(:access_token, :allow_read_prefs => true)
capability = ApiCapability.new token
[:update_all, :update, :destroy].each do |act| [:update_all, :update, :destroy].each do |act|
assert capability.cannot? act, UserPreference assert capability.cannot? act, UserPreference
@ -123,7 +113,9 @@ class UserApiCapabilityTest < ApiCapabilityTest
assert capability.can? act, UserPreference assert capability.can? act, UserPreference
end end
capability = ApiCapability.new tokens(:allow_write_prefs) token = create(:access_token, :allow_write_prefs => true)
capability = ApiCapability.new token
[:index, :show].each do |act| [:index, :show].each do |act|
assert capability.cannot? act, UserPreference assert capability.cannot? act, UserPreference
end end