Rails授权?签入模型与控制器

时间:2011-01-26 19:40:49

标签: ruby-on-rails-3 cancan

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

我正在讨论是否将支票放在CanCan中作为控制器上的过滤器应用的位置,或者是否也将其放在用户模型中。建议的做法是什么?

1 个答案:

答案 0 :(得分:1)

我认为一个好的DRY方法是在模型中创建一个方法来测试是否允许删除。然后从您的控制器或ability.rb中使用该方法。恕我直言,我认为,如果有可能在将来更改为不同的权限系统,那么将复杂的权限/业务逻辑与CanCan分离会更好。

在你的模特中:

def can_destroy_list(list)
   ... Do check here ....
end

在ability.rb

can :destroy, List do |list|  
    user.can_destroy_list(list)
end  

如果需要,您的控制器和视图也可以直接在模型实例上使用can_destroy_list:如果can? :destroy, @list