【问题标题】:Prevent user from accessing page if not current user如果不是当前用户,则阻止用户访问页面
【发布时间】:2014-04-17 01:58:05
【问题描述】:

我在 Rails 4 (cancancan) 上使用 CanCan,我只想授权当前用户访问设置页面。

例如,用户 ID 1 只能访问 /settings/1。用户 ID 1 应该无法查看 /settings/2 或任何其他 ID。

我的角色是:管理员、用户、访客、被禁止

能力.rb:

  include CanCan::Ability

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

用户控制器:

  def settings
    @user = User.find(params[:id])
  end

【问题讨论】:

  • 您是否将settings 定义为路由中的资源?如果是的话,也许将其更改为资源将是一个很好的解决方案。我的意思是任何用户只存在一个(自己的)设置页面。
  • 到目前为止你运气好吗?

标签: ruby-on-rails cancan


【解决方案1】:

来自authorizing controller actions上的文档:

# app/controllers/users_controller.rb
def settings
  @user = User.find(params[:id])
  authorize! :settings, @user
end

这假设您已经正确地建立了访问参数:

# app/models/ability.rb
can :settings, User do |u|
  user.id == u.id
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多