Normally, with acts_as_paranoid, when you use a finder such as find or where, it excludes entries that have a deleted_at (or whatever you named your delete column) value other than null. However, I have created a user permission that allows users to view and manipulate even "deleted" (see: hidden) entities in the database. Thing is, as it stands, I will need to check for the permission every time I want to run find, or where, or what-have-you, and if you have that permission use with_deleted as opposed to having one place that checks to see if the acts_as_paranoid logic should even work to begin with, and always adding with_deleted when that logic shouldn't.

Is there any way to accomplish this, or something similar to it, to make it all DRY?

有帮助吗?

解决方案

You can use cancan. This allows you to define abilities. You can then define:

if user.admin?
  can :manage, User.with_deleted
else
  can :manage, User
end

Then you can select in the controller, using:

User.accessible_by(current_ability)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top