微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 如何使某些属性仅对具有特定角色的用户可访问?

在我的用户模型中,我有这个:
attr_accessible :role_ids,:as => :admin

但这似乎不起作用.

我希望只有当current_user.can?(:edit,Role)时才能访问此特定属性 – 即只有具有admin或superadmin角色的用户才能访问这些属性.

我该怎么做呢?

编辑1:我正在使用Devise,CanCan& Rolify.

解决方法

就像我说的,我们认为将属性限制为某些角色的最佳方法是使用DHH最近推出的 strong parameters gem.这也是Rails4的一部分,谢天谢地.

即使它不适合,最好开始集成这些原则,因为它将使您的Rails 3到4升级更容易.

如果您拥有Railscasts Pro会员资格,Ryan Bates已经再次获得了fantastic tutorial.

简而言之,这是Railscast推荐的内容.

安装gem后,从模型中删除attr_accessible.

将其添加到初始化程序:

ActiveRecord::Base.send(:include,ActiveModel::ForbiddenAttributesProtection)

更改控制器中的更新操作::

def update
  @topic = Topic.find(params[:id])
  if @topic.update_attributes(topic_params)
    redirect_to topics_url,notice: "Updated topic."
  else
    render :edit
  end
end

在控制器中创建一个私有方法

def topic_params
   if current_user && current_user.admin?
     params[:topic].permit(:name,:sticky)
    else
      params[:topic].permit(:name)
    end
  end

在您的情况下,就像我们一样,您必须更改topic_params方法以使用您的角色.

在RailsCast中还有一些建议,它真的值9美元! (我与该网站没有任何关系,它对我们来说是非常宝贵的)

如果这有帮助,请告诉我.

原文地址:https://www.jb51.cc/ruby/264671.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐