这看起来应该是相当简单的事情,因为它会被很多需要。我检查用户是否正常登录,但一旦用户登录,他们可能会更改其他人的帐户。例如:假设 ID 为 1 的用户已登录,并且他们将 /users/2/edit 作为 url。这将向他们显示用户 2 的数据并允许他们修改它。当然,我可以改变控制器中的编辑操作以使用类似的东西......
def edit
@user = User.find(current_user.id)
end
其中 current_user 在控制器中设置,因此用户始终是登录的人。如果您只有几个具有几个操作的控制器,这很好,但如果您有很多控制器,这可能会很痛苦。似乎应该有一种方法可以在全球范围内限制这种情况,以便用户无论使用什么操作或控制器都只能更新自己的数据。
有没有办法限制用户只能使用自己的数据进行所有操作?
在你的 application_controller.rb 中你可以尝试这个:
class ApplicationController < ActionController::Base
before_filter :validate_user
private
def validate_user() #might need to pass id and current_user
if current_user.id == params[:id]
# continue to current_user url
else
flash[:error] = "Please access one of your own pages"
redirect_to(:back)
end
end
end
通过将这些内容放入应用程序控制器中,它应该在所有控制器中可用,但是如果您不需要确认这是当前用户(例如主页),那么您可能需要在任何特定控制器中使用skip_before_filter(对于需要它的特定操作),例如在页面控制器中
class PagesController < ApplicationController
skip_before_filter :validate_user, :only => [:home, :about]
end
欲了解更多信息,请查看此链接到过滤器上的导轨 http://guides.rubyonrails.org/action_controller_overview.html#filters。也可能有更有效的方法来实现这一目标。
希望能帮助到你
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)