设计:如何防止用户看到其他用户信息

时间:2014-05-29 17:16:01

标签: ruby-on-rails devise

当用户登录时,他有能力查看他正在参加的活动。 用户控制器中的操作如下

class UsersController < ApplicationController
  before_filter :authenticate_user!

  def events
    @title = "Events"
    @event = User.find(params[:id])
    @events = @event.event_presence.paginate(page: params[:page])
    render 'show_events'
  end
end

然而,用户(2)只需更改http地址即可查看用户(3)的事件: / users / 2 / events to users / 3 / events

所以我的问题是,如何确保用户(2)只能看到用户(2)而不是用户(3)的事件。

由于

2 个答案:

答案 0 :(得分:1)

过滤event方法中的current_user.id而不是params [:id]

@event = User.find(current_user.id)

然而,更好的方法是拥有一条不包含id

的特殊路线
get 'events' => 'users#events', as: :users_events

并像这样使用

= link_to 'Events', users_events_path

答案 1 :(得分:0)

Cancan是一个宝石,可以帮助您定义用户可以做什么和不可以做什么。

https://github.com/ryanb/cancan

它适用于设计,所以不要担心实施。

您也可以尝试角色:

https://github.com/the-teacher/the_role

就个人而言,我认为其文档更好。