在我的应用程序中使用cancan和devise

时间:2012-12-31 19:04:11

标签: ruby-on-rails devise cancan

我想使用cancan来限制想要在我的应用中查看某些页面的用户。

所以我尝试通过本教程来做到这一点: http://www.roberthuberdeau.com/articles/9-Blog-tutorial-part-3

我有两个角色:Admin和Worker,我有两个控制器:Tasksadmins和Workers。

我想定义下一件事:

1)工人可以管理和查看Workerscontroller的所有内容。

2)管理员可以管理和查看Tasksadminscontroller的所有内容。

我不确定我是否正确定义了它:

class Ability
    include CanCan::Ability

    def initialize(user)
      user ||= User.new # guest user

      if user.role? :Admin
        can :manage, :tasksadmins
      elsif user.role? :Worker
        can :manage, :workers
      end
   end
end

我认为我不需要实现的下一件事是:“def初始化用户位是针对访客用户的。”我强制用户使用:before_filter :authenticate_user

进行签名

接下来是:开始根据用户角色限制对博客应用程序的访问:

我不知道应该写什么,在哪里写。

在示例中,他写道:

authorize! :edit, @article

所以我试着在tasksadmins控制器中编写下面的命令:

authorize! :edit, @tasksadmins
authorize! :new, @tasksadmins
authorize! :index, @tasksadmins
authorize! :create, @tasksadmins
authorize! :show, @tasksadmins
authorize! :destroy, @tasksadmins

但是我收到了一个错误:undefined method 'authorize!' for TasksadminsController:Class

请帮助我,我在cancan的定义的最后。

1 个答案:

答案 0 :(得分:1)

这篇文章过时了,我建议在github页面上查看CanCan文档,特别是this one。这看起来像您想要做的但是如文档中所示,您不必单独执行authorize每个操作。此外,this应该有助于你的第二个设计问题。如果您正在指定版本的版本,如文章中所示,我强烈建议您尽可能升级您的宝石。祝你好运!