使用声明性授权过滤对嵌套资源的访问

时间:2015-03-21 15:43:48

标签: ruby-on-rails nested declarative-authorization

我在找什么

一种过滤对嵌入在名为" Obra"的模型中的索引视图(planilhas)的访问的方法。基于用户是否与特定的" Obra"。

相关联

我试图将filter_access_添加到索引操作,但我的模型 Planilha 嵌套在 Obra 上,我想检查当前用户是否已分配到 Obra 。因此,他/她可以看到与该特定 obra 相关联的所有 Planilhas

我做了什么

我已经在Planilhas_controller中尝试了以下内容

filter_access_to [:index], require: manage, context: obras, attribute_check: true

但事实是,根据docs,它会尝试找到认为 params [:id] 的上下文模型,但事实并非如此,我需要它要参数[:obra_id]

我还尝试在控制器中使用nested_in选项,如下所示:

filter_access_to [:index], require: :manage, nested_in: :obras, attribute_check: true

但是,正如预期的那样,我无法访问索引页面,因为它找不到Planilha的ID。

我的模特是:

class User < ActiveRecord::Base
    has_many :obras, through: :responsibilities
end

class Obra < ActiveRecord::Base
    has_many :planilhas
    has_many :users, through: :responsibilities
 end

class Planilha < ActiveRecord::Base
    belongs_to :obra
end

感谢您的帮助

更新

我设法通过创建构建对象Planilha的before_filter操作来解决这个问题。我不相信这是最好的解决方案,但它确实有用。

Planilhas_Controller:

 before_filter :set_planilha

def set_planilha
  @planilha = !params[:id].nil? ? Planilha.find(params[:id]) : Planilha.new       
 end

0 个答案:

没有答案