From 4304072b2c93d93ba07f2eb86f8a4848bd35c5c0 Mon Sep 17 00:00:00 2001 From: Stella Rouzi Date: Sun, 17 Aug 2014 16:40:48 +0300 Subject: [PATCH 1/4] allow for organizers to also manage users --- app/models/ability.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/ability.rb b/app/models/ability.rb index a7fb93e6..4a66f300 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -67,7 +67,7 @@ class Ability signed_in(user) # Inherit abilities from signed user # User with role - can :manage, User if user.is_admin # ??? || (user.has_role? :organizer, :any) + can :manage, User if user.is_admin || (user.has_role? :organizer, :any) can [:new, :create], Conference if user.is_admin || (user.has_role? :organizer, :any) can [:index, :show, :gallery_photos], Conference can :manage, Conference, id: conf_ids_for_organizer From 95b1be7886e5d35156e4ac95c478456bcb548c9c Mon Sep 17 00:00:00 2001 From: Stella Rouzi Date: Sun, 17 Aug 2014 20:42:34 +0300 Subject: [PATCH 2/4] make second user admin --- app/models/user.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 9ebea407..ff72ce52 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -49,8 +49,7 @@ class User < ActiveRecord::Base end def setup_role - self.is_admin = true if User.count == 0 - roles << Role.where(name: 'Admin') if User.count == 1 + self.is_admin = true if User.count == 1 end # Gets the roles of the user, groups them by role.name and returns the resource(s) of each role From e5290c65fa256e0d820d037703e316d24fb1378b Mon Sep 17 00:00:00 2001 From: Stella Rouzi Date: Sun, 17 Aug 2014 22:01:04 +0300 Subject: [PATCH 3/4] address the issue of second user becoming an admin automatically. --- spec/controllers/admin/conferences_controller_spec.rb | 3 ++- spec/factories/users.rb | 6 ++++++ spec/models/ability_spec.rb | 3 ++- spec/models/user_spec.rb | 6 +++--- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/spec/controllers/admin/conferences_controller_spec.rb b/spec/controllers/admin/conferences_controller_spec.rb index f3e179ab..c76c3ade 100644 --- a/spec/controllers/admin/conferences_controller_spec.rb +++ b/spec/controllers/admin/conferences_controller_spec.rb @@ -4,7 +4,8 @@ describe Admin::ConferenceController do # It is necessary to use bang version of let to build roles before user let(:conference) { create(:conference) } - let!(:first_user) { create(:user) } + let!(:deleted_user) { create(:deleted_user) } + let!(:admin_user) { create(:user) } # Second user. Automatically becomes admin. let!(:organizer_role) { create(:role, name: 'organizer', resource: conference) } let(:organizer) { create(:user, role_ids: organizer_role.id) } diff --git a/spec/factories/users.rb b/spec/factories/users.rb index d404aefb..ce82fb78 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -22,5 +22,11 @@ FactoryGirl.define do factory :organizer do after(:create) { |user| user.role_ids = create(:organizer_role).id } end + + factory :deleted_user do + after(:create) { |user| user.email = 'deleted@localhost.osem', + name = 'User deleted', + biography = 'Data is no longer available for deleted user.' } + end end end diff --git a/spec/models/ability_spec.rb b/spec/models/ability_spec.rb index a95613ba..082ba894 100644 --- a/spec/models/ability_spec.rb +++ b/spec/models/ability_spec.rb @@ -4,7 +4,8 @@ require 'cancan/matchers' describe 'User' do describe 'Abilities' do subject(:ability){ Ability.new(user) } - let!(:first_user) { create(:user) } # automatically becomes admin + let!(:deleted_user) { create(:deleted_user) } + let!(:admin_user) { create(:user) } # Second user. Automatically becomes admin. let(:user){ nil } let(:conference_not_public) { create(:conference, make_conference_public: false) } let(:conference_public) { create(:conference, make_conference_public: true)} diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index fbae0ef3..05ccc045 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -3,8 +3,8 @@ require 'spec_helper' describe User do # It is necessary to use bang version of let to build roles before user - let!(:user_admin) { create(:user) } - let!(:admin) { create(:admin) } + let!(:deleted_user) { create(:deleted_user) } + let!(:admin_user) { create(:user) } # Second user. Automatically becomes admin. let!(:participant) { create(:user) } let!(:conference) { create(:conference) } let!(:organizer_role) { create(:organizer_role, resource: conference) } @@ -13,7 +13,7 @@ describe User do let!(:user) { create(:user) } it 'returns the correct role' do - expect(user_admin.is_admin).to eq(true) + expect(admin_user.is_admin).to eq(true) expect(organizer.roles.first).to eq(organizer_role) end From b668120883f0a26dd7afa39557605cb09e2f22a6 Mon Sep 17 00:00:00 2001 From: Stella Rouzi Date: Sun, 17 Aug 2014 22:20:28 +0300 Subject: [PATCH 4/4] fix --- spec/factories/users.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/spec/factories/users.rb b/spec/factories/users.rb index ce82fb78..e1aa7955 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -24,9 +24,7 @@ FactoryGirl.define do end factory :deleted_user do - after(:create) { |user| user.email = 'deleted@localhost.osem', - name = 'User deleted', - biography = 'Data is no longer available for deleted user.' } + after(:create) { |user| user.email = 'deleted@localhost.osem', user.name = 'User deleted', user.biography = 'Data is no longer available for deleted user.' } end end end