Stop updating the fav_string attribute on posts. The column still exists on the table, but is no longer used or updated. Like the pool_string in7d503f08, the fav_string was used in the past to facilitate `fav:X` searches. Posts had a hidden fav_string column that contained a list of every user who favorited the post. These were treated like fake hidden tags on the post so that a search for `fav:X` was treated like a tag search. The fav_string attribute has been unused for search purposes for a while now. It was only kept because of technicalities that required departitioning the favorites table first (340e1008e) before it could be removed. Basically, removing favorites with `@favorite.destroy` was slow because Rails always deletes object by ID, but we didn't have an index on favorites.id, and we couldn't easily add one until the favorites table was departitioned. Fixes #4652. See https://github.com/danbooru/danbooru/issues/4652#issuecomment-754993802 for more discussion of issues caused by the fav_string (in short: write amplification, post table bloat, and favorite inconsistency problems).
91 lines
1.5 KiB
Ruby
91 lines
1.5 KiB
Ruby
class PostPolicy < ApplicationPolicy
|
|
def show_seq?
|
|
true
|
|
end
|
|
|
|
def random?
|
|
true
|
|
end
|
|
|
|
def update?
|
|
unbanned? && record.visible?
|
|
end
|
|
|
|
def revert?
|
|
update?
|
|
end
|
|
|
|
def copy_notes?
|
|
update?
|
|
end
|
|
|
|
def mark_as_translated?
|
|
update?
|
|
end
|
|
|
|
def move_favorites?
|
|
user.is_approver? && record.fav_count > 0 && record.parent_id.present?
|
|
end
|
|
|
|
def regenerate?
|
|
user.is_moderator?
|
|
end
|
|
|
|
def delete?
|
|
user.is_approver? && !record.is_deleted?
|
|
end
|
|
|
|
def destroy?
|
|
delete?
|
|
end
|
|
|
|
def ban?
|
|
user.is_approver? && !record.is_banned?
|
|
end
|
|
|
|
def unban?
|
|
user.is_approver? && record.is_banned?
|
|
end
|
|
|
|
def expunge?
|
|
user.is_admin?
|
|
end
|
|
|
|
def visible?
|
|
record.visible?(user)
|
|
end
|
|
|
|
def can_use_mode_menu?
|
|
user.is_gold?
|
|
end
|
|
|
|
def can_view_favlist?
|
|
user.is_gold?
|
|
end
|
|
|
|
# whether to show the + - links in the tag list.
|
|
def show_extra_links?
|
|
user.is_gold?
|
|
end
|
|
|
|
def permitted_attributes
|
|
[
|
|
:tag_string, :old_tag_string, :parent_id, :old_parent_id,
|
|
:source, :old_source, :rating, :old_rating, :has_embedded_notes,
|
|
].compact
|
|
end
|
|
|
|
def api_attributes
|
|
attributes = super
|
|
attributes += [:has_large, :has_visible_children]
|
|
attributes += TagCategory.categories.map {|x| "tag_string_#{x}".to_sym}
|
|
attributes += [:file_url, :large_file_url, :preview_file_url] if visible?
|
|
attributes -= [:id, :md5] if !visible?
|
|
attributes
|
|
end
|
|
|
|
def html_data_attributes
|
|
super + [:has_large?, :current_image_size]
|
|
end
|
|
end
|