after_create :update_permissions
after_create :update_trash
- after_update :update_permissions
+ after_update :update_permissions, :if => :owner_uuid_changed?
after_update :update_trash
after_destroy :clear_permissions_and_trash
end
def update_trash
- if trash_at_changed? or owner_uuid_changed? or (new_record? and !trash_at.nil?)
+ if trash_at_changed? or owner_uuid_changed?
# The group was added or removed from the trash.
#
# Strategy:
end
def update_permissions
- if new_record? or owner_uuid_changed?
- User.update_permissions self.owner_uuid, self.uuid, 3
- end
+ User.update_permissions self.owner_uuid, self.uuid, 3
end
def clear_permissions_and_trash
(user.uuid != anonymous_user_uuid)
}
after_create :send_admin_notifications
- after_update :update_permissions
+ after_update :update_permissions, :if => :owner_uuid_changed?
after_update :send_profile_created_notification
after_update :sync_repository_names, :if => Proc.new { |user|
(user.uuid != system_user_uuid) and
end
def update_permissions
- if owner_uuid_changed?
-# puts "Update permissions for #{uuid} #{new_record?}"
-# User.printdump %{
-# select * from materialized_permissions where user_uuid='#{uuid}'
-# }
-# puts "---"
+
+ puts "Update permissions for #{uuid}"
+ User.printdump %{
+select * from materialized_permissions where user_uuid='#{uuid}'
+}
+ puts "---"
User.update_permissions self.owner_uuid, self.uuid, 3
-# User.printdump %{
-#select * from materialized_permissions where user_uuid='#{uuid}'
-#}
- end
+
+ puts "post-update"
+ User.printdump %{
+select * from materialized_permissions where user_uuid='#{uuid}'
+}
+ puts "<<<"
end
def self.printdump qr
# 4. Upsert each permission in our subset (user, group, val)
## testinging
-# puts "What's in there now for #{starting_uuid}"
-# printdump %{
-# select * from materialized_permissions where user_uuid='#{starting_uuid}'
-# }
+ puts "__ update_permissions __"
+ puts "What's in there now for #{starting_uuid}"
+ printdump %{
+select * from materialized_permissions where user_uuid='#{starting_uuid}'
+}
-# puts "search_permission_graph #{perm_origin_uuid} #{starting_uuid}, #{perm_level}"
-# printdump %{
-# select '#{perm_origin_uuid}'::varchar as perm_origin_uuid, target_uuid, val, traverse_owned from search_permission_graph('#{starting_uuid}', #{perm_level})
-# }
+ puts "search_permission_graph #{perm_origin_uuid} #{starting_uuid}, #{perm_level}"
+ printdump %{
+select '#{perm_origin_uuid}'::varchar as perm_origin_uuid, target_uuid, val, traverse_owned from search_permission_graph('#{starting_uuid}', #{perm_level})
+}
# puts "Perms out"
# printdump %{
q1 = ActiveRecord::Base.connection.exec_query %{
select * from #{temptable_perms}
}
- # puts "recomputed perms was #{perm_origin_uuid} #{starting_uuid}, #{perm_level}"
- # q1.each do |r|
- # puts r
- # end
+ puts "recomputed perms was #{perm_origin_uuid} #{starting_uuid}, #{perm_level}"
+ q1.each do |r|
+ puts r
+ end
+ puts "<<<<"
ActiveRecord::Base.connection.exec_query %{
delete from materialized_permissions where
where links.link_class='permission'
),
traverse_graph(target_uuid, val, traverse_owned) as (
- values (starting_uuid, starting_perm, true)
+ values (starting_uuid, starting_perm,
+ (starting_uuid like '_____-j7d0g-_______________' or
+ (starting_uuid like '_____-tpzed-_______________' and starting_perm >= 3)))
union
(select edges.head_uuid,
least(edges.val, traverse_graph.val),
END) as ps
where links.link_class='permission' and
links.tail_uuid not in (select target_uuid from perm_from_start) and
- links.head_uuid in (select target_uuid from perm_from_start))
+ links.head_uuid in (select target_uuid from perm_from_start)),
-select materialized_permissions.user_uuid,
- u.target_uuid,
- max(least(u.val, materialized_permissions.perm_level)),
- bool_or(u.traverse_owned)
- from ((select * from perm_from_start) union (select * from additional_perms)) as u
- join materialized_permissions on (u.perm_origin_uuid = materialized_permissions.target_uuid)
- where materialized_permissions.traverse_owned
- group by materialized_permissions.user_uuid, u.target_uuid
-union
- select target_uuid as user_uuid, target_uuid, 3, true
- from perm_from_start where target_uuid like '_____-tpzed-_______________'
+ identity_perms(perm_origin_uuid, target_uuid, val, traverse_owned) as (
+ select target_uuid as perm_origin_uuid, target_uuid, 3, true
+ from perm_from_start where target_uuid like '_____-tpzed-_______________'),
+
+ all_perms(perm_origin_uuid, target_uuid, val, traverse_owned) as (
+ select * from perm_from_start
+ union
+ select * from additional_perms
+ union
+ select * from identity_perms
+ )
+
+ select materialized_permissions.user_uuid,
+ u.target_uuid,
+ max(least(u.val, materialized_permissions.perm_level)),
+ bool_or(u.traverse_owned)
+ from all_perms as u
+ join materialized_permissions on (u.perm_origin_uuid = materialized_permissions.target_uuid)
+ where materialized_permissions.traverse_owned
+ group by user_uuid, u.target_uuid
$$;
}