我的代码嵌套在我的路线中的公司下面。
资源:公司,除了:[:destroy]做 资源:代码,除了:[:destroy] 端
能力:
can :read, Company do |c|
user.has_role? :operator, c
end
can :read, Code do |c|
user.has_role? :operator, code.company
end
我的CodesController检查
before_filter :set_code, only: [:show, :edit, :update, :activate, :deactivate]
load_and_authorize_resource :except => :create #TODO fix as cancan updates
def index
if params[:company_id]
...
如果我访问/ companies / 1 /代码,我的用户无权访问,我看不到任何结果。但是,如果我尝试直接查看/ companies / 1,我会获得CanCan AccessDenied。
为什么不在嵌套索引中显示?
答案 0 :(得分:0)
您还应该在代码控制器中执行父模型的load_and_authorize_resource:
load_and_authorize_resource :company
然后通过您的公司加载您的代码资源:
load_and_authorize_resource :company
load_and_authorize_resource :code, through: :company
我没有看到你的before_filter有任何附加价值,因为这正是CanCan会为你做的......