【问题标题】:Cancan: trying to restrict access to Controller with no Model of the same nameCancan:试图限制对没有同名模型的控制器的访问
【发布时间】:2013-08-18 08:20:31
【问题描述】:

我有一个FooController,但没有模型 Foo - 它是第三方服务的网关。在FooController 中,do_bar 方法访问的资源是baz。目前任何人都可以通过FooController 管理其他人的baz,我想将管理限制在他们自己的范围内。

在我的能力.rb 中,我将以下内容写入initialize 方法:

can :manage, :foo

但是我想做的就是写这样的东西(当然这样不行):

can :manage, :foo
  @baz.user == user
end

FooController:

load_resource :baz, find_by: :user_data, parent: false

def do_bar
  @baz = Baz.find(params[:user_data]) #necessary otherwise @baz is nil
  authorize! :manage, :foo

  #other stuff
end

我本质上是想让@baz 实例(在FooController 中被操作)必须归该用户所有,以便他们能够管理它。

我该怎么做?

【问题讨论】:

    标签: ruby-on-rails cancan


    【解决方案1】:

    1.定义关于巴兹的能力。

    can :manage, Baz, :user => user
    

    2.您可以手动进行授权。

    #load_resource :baz, find_by: :user_data, parent: false
    
    def do_bar
      @baz = Baz.find(params[:user_data]) #necessary otherwise @baz is nil
      authorize! :manage, @baz
    
      #other stuff
    end
    

    【讨论】:

    • 就是这样。干杯,伙计
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多