Revision 7455449e
Added by Dominic Cleal about 10 years ago
db/migrate/20140219183343_migrate_permissions.rb | ||
---|---|---|
|
||
class FakeRole < ActiveRecord::Base
|
||
set_table_name 'roles'
|
||
scope :builtin, lambda { |*args|
|
||
compare = 'not' if args.first
|
||
where("#{compare} builtin = 0")
|
||
}
|
||
|
||
has_many :filters, :dependent => :destroy, :class_name => 'FakeFilter', :foreign_key => 'role_id'
|
||
has_many :permissions, :through => :filters, :class_name => 'FakePermission', :foreign_key => 'permission_id'
|
||
end
|
||
... | ... | |
|
||
say "Migrating user '#{user.login}'"
|
||
say "... cloning all roles"
|
||
clones = user.roles.builtin(false).map { |r| clone_role(r, user) }
|
||
user.roles = clones + user.roles.builtin(true)
|
||
user.roles = clones = user.roles.map { |r| clone_role(r, user) }
|
||
say "... done"
|
||
|
||
filters = Hash.new { |h, k| h[k] = '' }
|
||
... | ... | |
end
|
||
|
||
def self.clone_role(role, user)
|
||
clone = role.dup
|
||
clone.name = role.name + "_#{user.login}"
|
||
clone = role.dup
|
||
clone.name = role.name + "_#{user.login}"
|
||
clone.builtin = 0
|
||
clone.save!
|
||
|
||
role.filters.each { |f| clone_filter(f, clone) }
|
Also available in: Unified diff
fixes #5540 - also clone builtin roles during migration
(cherry picked from commit 5f72ef39f3bee84942d6706e2d9954d219a56ee4)