From b93018f033f37a7a7b719fd7dc6d5b3ad4a0f797 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Mon, 16 Mar 2015 17:17:07 -0400 Subject: [PATCH] 5416: Allow users with repo write permission to update modified_at. --- services/api/app/models/repository.rb | 10 +++++++++- services/api/test/fixtures/repositories.yml | 14 ++++++++++++++ services/api/test/unit/repository_test.rb | 12 +++++++++--- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/services/api/app/models/repository.rb b/services/api/app/models/repository.rb index f159b48bda..0189ee7236 100644 --- a/services/api/app/models/repository.rb +++ b/services/api/app/models/repository.rb @@ -22,7 +22,15 @@ class Repository < ArvadosModel def permission_to_create current_user and current_user.is_admin end + def permission_to_update - current_user and current_user.is_admin + return false if not current_user + return true if current_user.is_admin + # For normal objects, this is a way to check whether you have + # write permission. Repositories should be brought closer to the + # normal permission model during #4253. Meanwhile, we'll + # special-case this so arv-git-httpd can detect write permission: + return super if changed_attributes.keys - ['modified_at', 'updated_at'] == [] + false end end diff --git a/services/api/test/fixtures/repositories.yml b/services/api/test/fixtures/repositories.yml index a0e3b1f480..b80414ddff 100644 --- a/services/api/test/fixtures/repositories.yml +++ b/services/api/test/fixtures/repositories.yml @@ -2,33 +2,47 @@ crunch_dispatch_test: uuid: zzzzz-s0uqq-382brsig8rp3665 owner_uuid: zzzzz-tpzed-xurymjxw79nv3jz # active user name: crunch_dispatch_test + created_at: 2015-01-01T00:00:00.123456Z + modified_at: 2015-01-01T00:00:00.123456Z arvados: uuid: zzzzz-s0uqq-arvadosrepo0123 owner_uuid: zzzzz-tpzed-000000000000000 # root name: arvados + created_at: 2015-01-01T00:00:00.123456Z + modified_at: 2015-01-01T00:00:00.123456Z foo: uuid: zzzzz-s0uqq-382brsig8rp3666 owner_uuid: zzzzz-tpzed-xurymjxw79nv3jz # active user name: foo + created_at: 2015-01-01T00:00:00.123456Z + modified_at: 2015-01-01T00:00:00.123456Z repository2: uuid: zzzzz-s0uqq-382brsig8rp3667 owner_uuid: zzzzz-tpzed-xurymjxw79nv3jz # active user name: foo2 + created_at: 2015-01-01T00:00:00.123456Z + modified_at: 2015-01-01T00:00:00.123456Z repository3: uuid: zzzzz-s0uqq-38orljkqpyo1j61 owner_uuid: zzzzz-tpzed-d9tiejq69daie8f # admin user name: foo3 + created_at: 2015-01-01T00:00:00.123456Z + modified_at: 2015-01-01T00:00:00.123456Z repository4: uuid: zzzzz-s0uqq-38oru8hnk57ht34 owner_uuid: zzzzz-tpzed-d9tiejq69daie8f # admin user name: foo4 + created_at: 2015-01-01T00:00:00.123456Z + modified_at: 2015-01-01T00:00:00.123456Z auto_setup_repository: uuid: zzzzz-s0uqq-382brabc8rp3667 owner_uuid: zzzzz-tpzed-xurymjxw79nv3jz # active user name: auto_setup_repo + created_at: 2015-01-01T00:00:00.123456Z + modified_at: 2015-01-01T00:00:00.123456Z diff --git a/services/api/test/unit/repository_test.rb b/services/api/test/unit/repository_test.rb index 327170c108..fe99dd42ac 100644 --- a/services/api/test/unit/repository_test.rb +++ b/services/api/test/unit/repository_test.rb @@ -1,7 +1,13 @@ require 'test_helper' class RepositoryTest < ActiveSupport::TestCase - # test "the truth" do - # assert true - # end + test 'write permission allows changing modified_at' do + act_as_user users(:active) do + r = repositories(:foo) + modtime_was = r.modified_at + r.modified_at = Time.now + assert r.save + assert_operator modtime_was, :<, r.modified_at + end + end end -- 2.39.5