首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CanCan授权发布索引操作

CanCan授权发布索引操作
EN

Stack Overflow用户
提问于 2018-03-12 09:50:45
回答 2查看 1.3K关注 0票数 2

我在尝试使用cancan授权时遇到了问题。我有每个用户一个角色的用户,所以我按照cancan wiki中的建议添加了cancan wiki列。

我还有一个幼儿园索引视图和另一个儿童索引视图。

我试图实现的是只允许访问相应的用户的索引视图,其中包含角色、kinder花园或父级(针对子用户)。

当我现在授权幼儿园管理员时,没有人允许我访问索引视图,尽管我在我的能力模型中定义了索引视图。

我会很感激你的帮助。我不知道我错过了什么。

能力模式:

代码语言:javascript
复制
class Ability
include CanCan::Ability

def initialize(user)
[...]
elsif user.role == 'kindergarden'
   can [:update, :destroy], Kiga do |kiga|
     kiga.user_id == user.id
   end
   can :read, Kiga do |kiga|
     kiga.user_id == user.id
   end
   can :index, Kiga

   can :create, Kiga
else

end

幼儿园主任:

代码语言:javascript
复制
class KigasController < ApplicationController
before_action :set_kiga, only: [:show, :edit, :update, :destroy]

# GET /kigas
# GET /kigas.json
def index
  @kigas = Kiga.all
  authorize! :index, @kiga
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-12 11:48:56

您将自己的能力定义为块,需要有实例。在索引操作中,您只有活动记录作用域,而不是实际实例。

顺便说一下,您在控制器代码中有一个错误:

代码语言:javascript
复制
def index
  @kigas = Kiga.all
  authorize! :index, @kigas # was @kiga that is nil probably
end

看医生

只有在实际实例对象存在时,才计算该块。在检查类的权限时(例如在索引操作中),不会对其进行评估。

在这种情况下,您可以使用条件散列

代码语言:javascript
复制
 can [:update, :destroy], Kiga, user_id: user.id
票数 2
EN

Stack Overflow用户

发布于 2022-09-08 11:13:58

Got溶液

代码语言:javascript
复制
def index
  @kigas = Kiga.all
  authorize! :index, Kinga
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49232271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档