首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用CanCanCan gem和ActiveAdmin创建授权

使用CanCanCan gem和ActiveAdmin创建授权
EN

Stack Overflow用户
提问于 2017-12-11 23:59:13
回答 1查看 263关注 0票数 0

我创建了一些规则,其中一条如下所示:

代码语言:javascript
复制
can :create, Ticket, { author_id: user.id }

这应该允许当前通过身份验证的用户仅在author_id等于用户的id时才能创建票证。

在rails控制台中,我可以测试我的规则是否工作正常:

代码语言:javascript
复制
my_user.can? :create, Ticket.new(author: my_user)      # returns true
my_user.can? :create, Ticket.new(author: another_user) # returns false

考虑到我正在使用ActiveAdmin,我现在需要通过使用它的ActiveAdmin::AuthorizationAdapter来使用我的授权规则。

我面临的一个问题是,每当我创建“新票证”时,我都会被拒绝访问。

我仔细检查了失败的条件,似乎AA要求以下内容:

代码语言:javascript
复制
my_user.can? :create, Ticket.new # which returns false!

当我认为它应该要求以下内容时:

代码语言:javascript
复制
my_user.can? :create, Ticket # which returns true!

Ticket.new的所有参数都设置为nil:

代码语言:javascript
复制
<Ticket author_id: nil, ..., created_at: nil, updated_at: nil>

这就是我的CanCanCan散列条件失败的原因(author_id = nil无效,应该改为user_id )。

有没有可能解决这个问题?也许我设置CanCanCan规则的方式是错误的?

ActiveAdmin还提供了开箱即用的CanCanCan适配器,所以我想知道他们怎么会忽视这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-21 03:07:35

基于对类似问题的回答:

代码语言:javascript
复制
ActiveAdmin.register Ticket do
  before_build do |ticket|
    ticket.author = current_user
  end
end

这将在创建新对象时设置作者,从而使其能够按照CanCanCan功能中的配置进行访问。

@GoGoCarl使用上面的相关问题进行了评论,但我已经针对这里提出的问题进行了修改。原始答案:

https://stackoverflow.com/a/28738827/3353794

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47756702

复制
相关文章

相似问题

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