将 Rails 4.2.4 与 Devise (3.5.2) 和 Pundit (1.0.1) 结合使用。体面的曝光(2.3.2)。
我有一个简单的用户和想法的嵌套关联:
class User < ActiveRecord::Base
has_many :ideas
...
class Idea < ActiveRecord::Base
belongs_to :user
...
在routes.rb中
devise_for :users
resources :users do
resources :ideas
end
然后,如果 current_user 不是 Ideas 的所有者(在本例中,如果 current_user.id != 1),我只是尝试禁止访问 users/1/ideas 。
我不知道该怎么做。我可以在索引视图中仅显示 current_user 想法:
[想法控制器]
def show
authorize idea
end
[理念政策]
def show?
@current_user == @idea.user
end
但如何防止用户简单地导航到其他用户的 Idea 索引页面呢?
我想在 Ideas 控制器中我应该使用类似的东西:
def index
authorize user
end
但然后呢?如何向用户政策发送有关创意收集的信息?
或者我应该通过创意政策本身进行授权?
复制我在 GitHub 上的回复在这里,因为这会带来更多流量。
一种方法是创建存根Idea
由用户拥有以授权反对。
def index
@user = User::find(params[:user_id])
idea = Idea.new(user_id: @user.id)
authorize idea
# ...
end
and an index?
方法在你的IdeaPolicy
def index?
record.user_id = user.id
end
另一种方法是更改您授权的内容。而不是授权反对Idea
,授权反对User
.
def index
@user = User::find(params[:user_id])
authorize @user, :show_ideas?
# ...
end
并创建一个新的show_ideas?
方法对你的UserPolicy
def show_ideas?
user.id == record.id
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)