如何允许用户仅使用cancan访问他们自己的显示页面?

问题描述

| 我一直在使用cancan gem进行讲解,但仍停留在如何只允许用户访问自己的显示页面上。 我的代码如下所示: 能力模型
class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user.role == \"admin\"
      can :manage,:all
    else
      can :read,:all
      if user.role == \"author\"
        can :create,Review
        can :update,Review do |review|
          review.try(:user) == user
        end
        can :update,User do |user|
          user.try(:current_user) == current_user
        end
      end
      if user.role == \"owner\"
        can :update,Venue
      end
    end
  end
end
用户控制器
class UsersController < ApplicationController
  load_and_authorize_resource
end
用户(作者)只能更新自己的评论,但当前可以通过更改URL查看所有用户显示页面。 我在这里想念什么?     

解决方法

        约束可以直接在您的能力课程中传递,甚至比您尝试的方式还容易。我确定这缺少您想要的某些功能,但这应该可以帮助您入门。我假设评论“ѭ2”用户的外键为“ѭ3”。看起来您还需要对Venues进行类似的约束,但是您的代码中没有约束,因此我没有在其中添加约束。
class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user.role == \"admin\"
      can :manage,:all
    elsif user.role == \"author\"
      can :create,Review
      can :update,Review,:user_id => user.id
      can [:show,:update],User,:id => user.id
    elsif user.role == \"owner\"
      can :update,Venue
      can [:show,:id => user.id
    else
      can [:show,:id => user.id
    end
  end
end
    ,        尝试在控制器中添加一个检查,以便何时出现/ show请求,以检查current_user是页面/配置文件的所有者。类似于以下内容:
def show
  @user = User.find(params[:id])
  #show_page unless current_user.id != @user.id
end
可能会在出现故障时闪出“您不拥有该页面”的通知或类似内容。