1

我正在对user模型进行检查以确定她/他是否有一个或多个task_list,如果她有多个 task_list,则仅允许她将其删除,否则将引发异常。我基本上在用户模型中有一个名为 delete_list 的方法,以允许速记删除,例如user1.delete_list(list1)

我正在讨论是否将检查放在 CanCan 中,它将作为控制器上的前置过滤器应用,或者是否也将其放在用户模型中。推荐的做法是什么?

4

1 回答 1

1

我认为一个好的 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

于 2011-01-27T01:14:34.823 回答