From 51d77d5781ee8458bb69f5cadef92b0b376ee4e6 Mon Sep 17 00:00:00 2001 From: Rob Harrington Date: Thu, 25 Feb 2016 09:58:15 +1100 Subject: [PATCH] Adding migration to explicitly grant VO permission where it is currently implicitly granted via managers/owners In preparation for removing implicitly granted permissions --- ...t_explicit_variant_override_permissions.rb | 24 +++++++++++++++++++ db/schema.rb | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20160224034034_grant_explicit_variant_override_permissions.rb diff --git a/db/migrate/20160224034034_grant_explicit_variant_override_permissions.rb b/db/migrate/20160224034034_grant_explicit_variant_override_permissions.rb new file mode 100644 index 0000000000..c8a8795f6f --- /dev/null +++ b/db/migrate/20160224034034_grant_explicit_variant_override_permissions.rb @@ -0,0 +1,24 @@ +class GrantExplicitVariantOverridePermissions < ActiveRecord::Migration + def up + hubs = Enterprise.is_distributor + + hubs.each do |hub| + next if hub.owner.admin? + explicitly_granting_producer_ids = hub.relationships_as_child + .with_permission(:create_variant_overrides).map(&:parent_id) + + managed_producer_ids = Enterprise.managed_by(hub.owner).is_primary_producer.pluck(:id) + implicitly_granting_producer_ids = managed_producer_ids - explicitly_granting_producer_ids - [hub.id] + + # create explicit VO permissions for producers currently granting implicit permission + Enterprise.where(id: implicitly_granting_producer_ids).each do |producer| + relationship = producer.relationships_as_parent.find_or_initialize_by_child_id(hub.id) + permission = relationship.permissions.find_or_initialize_by_name(:create_variant_overrides) + relationship.save! unless permission.persisted? + end + end + end + + def down + end +end diff --git a/db/schema.rb b/db/schema.rb index 5e62d66530..9d301086ed 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20160218235221) do +ActiveRecord::Schema.define(:version => 20160224034034) do create_table "account_invoices", :force => true do |t| t.integer "user_id", :null => false