加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails CanCan Hash条件不起作用

发布时间:2020-12-17 02:00:20 所属栏目:百科 来源:网络整理
导读:我有一个简单的Ability.rb设置如下: if user.role? :super_admin can :manage,:allelsif user.role? :registered can :review,[Card,Deck],:visible = trueend 别名:review = :index,:list,:show,:to. Card和Deck表都具有带有布尔选项的可见列.目前,表
我有一个简单的Ability.rb设置如下:

if user.role? :super_admin
  can :manage,:all
elsif user.role? :registered
  can :review,[Card,Deck],:visible => true
end

别名:review => :index,:list,:show,:to. Card和Deck表都具有带有布尔选项的可见列.目前,表格中的每个对象都有:visible =>假.因此,我期望具有注册角色的用户将无法:查看任何对象,但事实并非如此.控制器级别的限制工作正常(编辑和删除不可访问),但我似乎无法使用条件的哈希来限制资源的查看.有什么想法吗?

编辑:我在两个控制器中有authorize_resource.使用Ruby 1.9.2,Rails 3.1和CanCan 1.6.7.我正在使用设计1.4.9进行身份验证. MySQL是数据库.

编辑:
嗯..我想出了一种根据条件限制资源的方法.尽管我在所有控制器中都有authorize_resource(并且它可以限制对方法的访问),但我必须添加授权!到我想限制资源的方法.例如,要限制Decks的show动作,条件为:visible =>是的,我不得不添加授权!因此:

def show
  @deck = Deck.find(params[:deck_id]
  authorize! :review,@deck
end

说实话,我对这个解决方案不满意,因为我没有看到authorize_resource无法工作的原因.我很乐意看到解释.

解决方法

你在打电话吗?

load_resource_authorize_resource

在你的控制器就像这样,或者你是否包括一个模型来授权?

我发现如果我键入以下内容,我可以复制您的问题:

load_resource_authorize_resource Deck

我认为后者不起作用的原因是因为你要求CanCan任意授权“Deck”,而不是授权控制器动作,这是你真正想做的事情.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读