【问题标题】:use cancan and devise in my application在我的应用程序中使用 cancan 和 devise
【发布时间】:2012-12-31 19:04:10
【问题描述】:

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

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

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

我要定义下一个东西:

1)Workers可以管理和查看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 initialize user bit 是为来宾用户准备的。”我强制用户登录: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的定义末尾。

【问题讨论】:

  • 我很惊讶每个角色只能访问一个控制器。您的“Taskadmins”实际上管理“Taskadmin”模型对象吗?
  • 是的.. 我的申请是:TODO 列表。在 tasksadmins 控制器中,管理员可以让工作人员执行任务。在“工人”控制器中,工人可以看到任务并仅编辑完成按钮(如果任务完成与否)。

标签: ruby-on-rails devise cancan


【解决方案1】:

这篇文章已经过时了,我建议查看 github 页面上的 CanCan 文档,尤其是 this one。这看起来像您想要做的,但如文档中所示,您不必单独 authorize 每个操作。此外,this 应该可以帮助您解决第二个设计问题。如果您要指定设计的版本,如文章中所示,我强烈建议您尽可能升级您的 gem。祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 2012-06-08
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多