mar*_*ion 6 ruby-on-rails ruby-on-rails-3
在我的User模型中,我有这个:
attr_accessible :role_ids, :as => :admin
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.
我希望这个特定属性只有在current_user.can?(:edit, Role)- 即只有具有角色admin或superadmin应该能够访问这些属性的用户时才可访问.
我该怎么做呢?
编辑1:我正在使用Devise,CanCan和Rolify.
就像我说的,我们认为将属性限制为某些角色的最佳方法是使用DHH最近引入的强参数 gem.这也是Rails4的一部分,谢天谢地.
即使它不适合,最好开始集成这些原则,因为它将使您的Rails 3到4升级更容易.
如果您拥有Railscasts Pro会员资格,Ryan Bates已经制作了另一个精彩的教程.
简而言之,这是Railscast推荐的内容.
安装gem后,从模型中删除attr_accessible.
将其添加到初始化程序:
ActiveRecord::Base.send(:include, ActiveModel::ForbiddenAttributesProtection)
Run Code Online (Sandbox Code Playgroud)
更改控制器中的更新操作::
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
Run Code Online (Sandbox Code Playgroud)
在控制器中创建一个私有方法:
def topic_params
if current_user && current_user.admin?
params[:topic].permit(:name, :sticky)
else
params[:topic].permit(:name)
end
end
Run Code Online (Sandbox Code Playgroud)
在您的情况下,就像我们一样,您必须更改topic_params方法以使用您的角色.
在RailsCast中还有一些建议,它真的值9美元!(我与该网站没有任何关系,它对我们来说是非常宝贵的)
如果这有帮助,请告诉我.
| 归档时间: |
|
| 查看次数: |
2361 次 |
| 最近记录: |