我正在尝试为每个用户实施私人资料页面。这是一个学习应用程序,因此人们可以访问他们在个人资料页面上支付的课程。因此,其他用户无法通过输入URL来访问个人资料页面... http响应应为404.
到目前为止,我们的想法是创建一个profiles_controller
def show
@user = User.find(current_user)
End
这样每个用户只能访问自己的页面。
有没有最好的方法呢?
答案 0 :(得分:2)
想一个理想的解决方案。 问题根本不存在。鉴于问题
“用户不应该看到其他用户的个人资料”
我们可以建立一个原则
“任何用户只有一个个人资料”
我们应该在路线中反映这种映射:
resource :profile # < not `resources`!
...该个人资料将在/profile
上提供。你的路线没有任何ids,没有什么可以改变,因此无需检查。它是有道理的,为什么检查任何东西,如果我们将使用相同的资源呢?
# ProfilesController
def show
@user = current_user
end
答案 1 :(得分:0)
before_action
中的show
方法可以ProfilesController
。基本上,您需要检查用户可以查看的配置文件 - 仅属于该用户。
我认为网址为/users/:user_id/profiles/:id
before_filter :check_profile, only: :show
def check_profile
user = User.find_by_id params[:user_id]
unless params[:id] == user.profile.id
redirect_to users_profiles_path(user, user.profile)
end
end
这样,只要用户尝试访问其他人的个人资料,用户就会被重定向到自己的个人资料路径。