【问题标题】:Block redirect to other posts pages阻止重定向到其他帖子页面
【发布时间】:2017-04-10 10:47:20
【问题描述】:

我有 2 个表:posts 和 users(它们的关系是多对多的),User 有很多 favorite_posts(带有 FavoritePost 表(它由 user_id 和 post_id 组成)。 所以,我有一条路线:
获取'favorite_posts',到:'favorite_posts#index' (用户/:user_id/favorite_posts) 以我的能力.rb:

class Ability 
  include CanCan::Ability

  def initialize(user)
    user ||= User.new
    if user.new_record?
      can :read, [Post]
    else
      can :read, [Post]
      can :manage, [Post], owner_id: user.id
      can :manage, [FavoritePost], user_id: user.id
    end
  end
end

在我的控制器中(favorite_posts_controller.rb):

class FavoritePostsController < ApplicationController
  load_and_authorize_resource through: :current_user

  def index
    @favorite_posts = User.find(params[:user_id]).favorite_posts
  end

所以,我需要通过ability.rb 阻止重定向到其他用户最喜欢的帖子的页面。我需要做什么?

【问题讨论】:

    标签: ruby-on-rails ruby cancancan


    【解决方案1】:

    看看来自 CanCan 维护者的 quote

    CanCan 可以回答用户能不能做的问题 一些东西,但是应用程序从那里所做的事情是非常特定于上下文的 而且我认为不适合 ability.rb 文件。

    如果您不想让其他用户查看当前用户最喜欢的帖子,最好将其放入您的 favorite_posts_controller 中的 before_action 过滤器中:

     class FavoritePostsController < ApplicationController
       load_and_authorize_resource through: :current_user
       before_action :correct_user, only: [:index] # add any other actions you want
    
       def index 
         @favorite_posts = current_user.favorite_posts.all
       end 
    
       private 
    
         def correct_user
           user = User.find(params[:user_id])
           redirect_to root_url unless current_user && current_user == user
         end
     end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-19
      • 1970-01-01
      • 2017-05-01
      • 2012-03-16
      • 2012-11-22
      • 2018-11-17
      • 2018-07-10
      相关资源
      最近更新 更多