ruby-on-rails – 如何使某些属性仅对具有特定角色的用户可访问
发布时间:2020-12-16 23:29:04 所属栏目:百科 来源:网络整理
导读:在我的用户模型中,我有这个: attr_accessible :role_ids,:as = :admin 但这似乎不起作用. 我希望只有当current_user.can?(:edit,Role)时才能访问此特定属性 – 即只有具有admin或superadmin角色的用户才能访问这些属性. 我该怎么做呢? 编辑1:我正在使用
在我的用户模型中,我有这个:
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美元! (我与该网站没有任何关系,它对我们来说是非常宝贵的) 如果这有帮助,请告诉我. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |