1

我有一个使用 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

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

4

1 回答 1

2

从文档

can :read, ModelName, :user_id => user.id
于 2012-09-30T18:00:04.280 回答