安全性:使用CanCan确保用户无法看到其他用户的个人资料

时间:2012-09-30 17:48:56

标签: ruby-on-rails security devise cancan

我有一个使用Devise,CanCan和Rolify来处理身份验证和授权的应用。但我认为我并没有充分利用这些宝石。现在我能力课中唯一的事情就是:

class Ability

  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user.has_role? :admin
      can :manage, :all
    else
      can :read, :all
    end
  end
end

我找到了一个安全漏洞,经过身份验证的用户可以查看其他用户个人资料。我通过更改用户控制器中的一些代码来修复它。

def show
  @user = current_user.has_role?(:admin) ? User.find(params[:id]) : current_user
end

这是处理这个洞的最佳方法吗?是否有最佳实践或轨道约定以不同的方式解决这个问题?

1 个答案:

答案 0 :(得分:2)

From the doc

can :read, ModelName, :user_id => user.id