diff options
| author | Zog | 2018-05-07 15:25:50 +0200 |
|---|---|---|
| committer | Zog | 2018-05-07 15:25:50 +0200 |
| commit | fb4d1c66cb4c0cd83e183a13ca5f9ea44803631b (patch) | |
| tree | 635d6315e5dbc734ad2ebd68b525358ba91e9a65 | |
| parent | fac03f56f2e84705cd30fc31d8007cc64f77d500 (diff) | |
| download | chouette-core-fb4d1c66cb4c0cd83e183a13ca5f9ea44803631b.tar.bz2 | |
Refs #6960; Add owners to workgroups
And define policies
| -rw-r--r-- | app/models/workgroup.rb | 1 | ||||
| -rw-r--r-- | app/policies/workgroup_policy.rb | 19 | ||||
| -rw-r--r-- | db/migrate/20180507130455_add_owner_to_workgroups.rb | 7 | ||||
| -rw-r--r-- | spec/policies/workgroup_policy_spec.rb | 44 |
4 files changed, 71 insertions, 0 deletions
diff --git a/app/models/workgroup.rb b/app/models/workgroup.rb index 247873869..a264247c7 100644 --- a/app/models/workgroup.rb +++ b/app/models/workgroup.rb @@ -1,6 +1,7 @@ class Workgroup < ApplicationModel belongs_to :line_referential belongs_to :stop_area_referential + belongs_to :owner, class_name: "Organisation" has_many :workbenches has_many :calendars diff --git a/app/policies/workgroup_policy.rb b/app/policies/workgroup_policy.rb new file mode 100644 index 000000000..01914bb51 --- /dev/null +++ b/app/policies/workgroup_policy.rb @@ -0,0 +1,19 @@ +class WorkgroupPolicy < ApplicationPolicy + class Scope < Scope + def resolve + scope + end + end + + def create? + false + end + + def desrtroy? + false + end + + def update? + record.owner == user.organisation + end +end diff --git a/db/migrate/20180507130455_add_owner_to_workgroups.rb b/db/migrate/20180507130455_add_owner_to_workgroups.rb new file mode 100644 index 000000000..2ed601492 --- /dev/null +++ b/db/migrate/20180507130455_add_owner_to_workgroups.rb @@ -0,0 +1,7 @@ +class AddOwnerToWorkgroups < ActiveRecord::Migration + def change + add_column :workgroups, :owner_id, :bigint + add_column :workbenches, :owner_compliance_control_set_ids, :hstore + remove_column :workgroups, :import_compliance_control_set_ids + end +end diff --git a/spec/policies/workgroup_policy_spec.rb b/spec/policies/workgroup_policy_spec.rb new file mode 100644 index 000000000..19f6c29d1 --- /dev/null +++ b/spec/policies/workgroup_policy_spec.rb @@ -0,0 +1,44 @@ +RSpec.describe WorkgroupPolicy, type: :policy do + + let( :record ){ build_stubbed :workgroup } + + permissions :create? do + it "should not allow for creation" do + expect_it.not_to permit(user_context, record) + end + end + + permissions :update? do + it "should not allow for update" do + expect_it.not_to permit(user_context, record) + end + + context "for the owner" do + before do + record.owner = user.organisation + end + + it "should allow for update" do + expect_it.to permit(user_context, record) + end + end + end + + permissions :destroy? do + it "should not allow for destroy" do + expect_it.not_to permit(user_context, record) + end + + context "for the owner" do + before do + record.owner = user.organisation + end + + it "should not allow for destroy" do + expect_it.not_to permit(user_context, record) + end + end + end + + +end |
