我正在对user
模型进行检查以确定她/他是否有一个或多个task_list
,如果她有多个 task_list,则仅允许她将其删除,否则将引发异常。我基本上在用户模型中有一个名为 delete_list 的方法,以允许速记删除,例如user1.delete_list(list1)
我正在讨论是否将检查放在 CanCan 中,它将作为控制器上的前置过滤器应用,或者是否也将其放在用户模型中。推荐的做法是什么?
我正在对user
模型进行检查以确定她/他是否有一个或多个task_list
,如果她有多个 task_list,则仅允许她将其删除,否则将引发异常。我基本上在用户模型中有一个名为 delete_list 的方法,以允许速记删除,例如user1.delete_list(list1)
我正在讨论是否将检查放在 CanCan 中,它将作为控制器上的前置过滤器应用,或者是否也将其放在用户模型中。推荐的做法是什么?
我认为一个好的 DRY 方法是在你的模型中创建一个方法来测试是否允许删除。然后从您的控制器或从ability.rb 使用该方法。恕我直言,我认为当您将来有可能更改为不同的权限系统时,将复杂的权限/业务逻辑与 CanCan 分离会更好。
在您的模型中:
def can_destroy_list(list)
... Do check here ....
end
在能力.rb
can :destroy, List do |list|
user.can_destroy_list(list)
end
如果需要,您的控制器和视图也可以can_destroy_list
直接在模型实例上使用或使用:如果can? :destroy, @list